广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言顺序表的概念及结构是什么
  • 881
分享到

C语言顺序表的概念及结构是什么

2023-06-30 13:06:05 881人浏览 泡泡鱼
摘要

这篇文章主要介绍“C语言顺序表的概念及结构是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言顺序表的概念及结构是什么”文章能帮助大家解决问题。1.顺序表的概念及结构顺序表是使用一段连续物理地

这篇文章主要介绍“C语言顺序表的概念及结构是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言顺序表的概念及结构是什么”文章能帮助大家解决问题。

    1.顺序表的概念及结构

    顺序表是使用一段连续物理地址的单元来依次储存数据的线性结构,一般采用数组存储。在数组上完成增删查改。

    C语言顺序表的概念及结构是什么

    顺序表分为两类:

    静态顺序表:使用定长数组储存元素

    struct SeqList{    int data;//存储的数据    int size;//记录数据个数    int 1000;//给定当前顺序表的总容量为1000};

    动态顺序表:使用动态开辟的数组存储

    struct SeqList{    int data;//存储的数据    int size;//记录数据个数    int capacity;//顺序表的总容量};

    2.增删查改的实现

    当我们需要储存的数据数目不确定时我们使用动态顺序表更佳,所以下面就用动态顺序表来实现增删查改。

    2.1扩容

    首先我们动态顺序表想要实现自动扩容,当当前数据量size等于总容量capacity时我们就需要自动增容,具体就是使用malloc函数开辟一定数量的空间,假如我们设定每次扩充二倍,代码如下:

    //增容void SLCheckcapacity(SL* pc){assert(pc != NULL);//检查容量,满了就扩容if (pc->sz == pc->capacity){//一次扩容二倍,如果初始为0就先扩容到4int newcapacity = pc->capacity == 0 ? 4 : pc->capacity * 2;//注意类型转换SLDatatype* tmp = (SLDatatype*)realloc(pc->data, sizeof(SLDatatype) * newcapacity);if (tmp == NULL){perror("SLCheckcapacity::realloc");exit(-1);}//讲开辟的空间tmp给到数组pc->data = tmp;pc->capacity = newcapacity;}}

    2.2插入数据

    插入数据时我们有三种情况,头插尾插和中间任意位置插。

    2.2.1尾插

    先从最简单的尾插开始,我们尾插时需要记录下当前的size,这样插入的时候就可以直接找到尾部,我们需要注意的是,我们插入之前需要判断一下当前的容量满了没有,如果满了就需要扩容,没满就可以直接插入。

    //尾插void SLPushBack(SL* pc, SLDatatype x){assert(pc != NULL);//需要判断是否需要增容SLCheckcapacity(pc);pc->data[pc->sz] = x;pc->sz++;}
    2.2.2头插

    头插相对来说要复杂一点,当头上没有数据时,我们就可以看成尾插直接插入,当头上有数据时,我们为了避免数据的覆盖,需要将所有数据向后移动,再放入在头部,在我们向后移动数据时我们也需要判断是否满容了。

    //头插void SLPushFront(SL* pc, SLDatatype x){assert(pc != NULL);SLCheckcapacity(pc);//挪动数据int end = pc->sz - 1;while (end >= 0){pc->data[end + 1] = pc->data[end];--end;}//插入数据pc->data[0] = x;pc->sz++;}
    2.2.3任意位置插入

    我们任意位置插入时有三种情况,当在第一个位置时就是头插可以调用头插的函数,在最后一个位置时就是尾插,就调用尾插的函数,当我们在中间的时我们需要找到需要插入的位置,然后将数据从这个位置开始向后挪动,再插入进去。

    //任意位置插入void SLInsert(SL* pc, int pos, SLDatatype x){assert(pc);    //判断pos是否在有效数据范围内assert(pos >= 0 && pos <= pc->sz);SLCheckcapacity(pc);    //挪动数据int end = pc->sz - 1;while (end >= pos){pc->data[end+1] = pc->data[end];--end;}pc->data[pos] = x;pc->sz++;}

    2.3删除数据

    删除数据和上面的插入数据差不多,我们也需要凑够三个方面来撕开,头部删除,尾部删除,中间任意位置删除,当我们删除数据时我们只需要将这个数据后的数据依次向前挪动,覆盖住这个数据即可。这里我们不能用free函数去释放那块地址的空间来删除,因为顺序表的物理地址是连续的。链表可以,下一章会介绍。

    2.3.1尾删

    尾部后面没有数据那么就把最后一个数据制成0就好了

    //尾删void SLPopBack(SL* pc){assert(pc != NULL);//不能删多了assert(pc->sz > 0);pc->sz--;}
    2.3.2头删

    将从第二个位置开始的数据往前挪动,这里需要注意,删除需要检查,以免越界。

    //删除需要检查,删多了会越界//头删void SLPopFront(SL* pc){assert(pc != NULL);//检查assert(pc->sz > 0);//从第二个元素开始从后往前挪直接将其覆盖int begin = 0;while (begin <= pc->sz){pc->data[begin-1] = pc->data[begin];++begin;}pc->sz--;}
    2.3.3任意位置删除

    任意位置删除我们只需要将我们需要删除的位置后面的数往前挪动就行了

    //任意位置删除void SLErase(SL* pc, int pos){assert(pc != NULL);assert(pos >= 0 && pos < pc->sz);int begin = pos;while (begin < pc->sz-1){pc->data[begin] = pc->data[begin + 1];begin++;}pc->sz--;}

    2.4查找

    我们给一个数据x来表示我们想要查找的数据,从前往后把顺序表遍历一遍,当给的X等于顺序表中的X时就找到了,返回当前位置的下标。

    //查找int SLFind(SL* pc, SLDatatype x){assert(pc != NULL);for (int i = 0; i < pc->sz; ++i){if (pc->data[i] == x){return i;}}printf("找不到\n");return;}

    2.5修改数据

    当我们想要修改某一个地方的数据时,直接将那个位置的数据输入新的数据覆盖掉就行了。

    //改数据void SlModify(SL* pc, int pos, SLDatatype x){assert(pc != NULL);if (pos >= 0 && pos <= pc->sz){pc->data[pos] = x;}else{printf("超出范围了\n");}}

    2.6销毁空间

    当我们顺序表使用完成过后,我们需要注意的是,我们malloc的空间并没有得到释放,可能会造成内存泄漏等问题(可参考前面的博客 '动态内存开辟' ),释放内存就需要用到free函数

    //销毁空间void SLDestory(SL* pc){if (pc->data){free(pc->data);pc->data = NULL;pc->capacity = pc->sz = 0;}}

    关于“C语言顺序表的概念及结构是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网其他教程频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: C语言顺序表的概念及结构是什么

    本文链接: https://www.lsjlt.com/news/329218.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C语言顺序表的概念及结构是什么
      这篇文章主要介绍“C语言顺序表的概念及结构是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言顺序表的概念及结构是什么”文章能帮助大家解决问题。1.顺序表的概念及结构顺序表是使用一段连续物理地...
      99+
      2023-06-30
    • C语言数据结构顺序表怎么构造
      本篇内容介绍了“C语言数据结构顺序表怎么构造”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言在学习链表之前先掌握顺序表什么是顺序表?顺序表...
      99+
      2023-06-30
    • Java数据结构之链表的概念及结构是什么
      今天小编给大家分享一下Java数据结构之链表的概念及结构是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、 链表的概念...
      99+
      2023-07-05
    • C语言数据结构顺序表的进阶讲解
      目录前言一、顺序表的构造VS功能1.顺序表的构造2.接口实现(功能)二、功能具体分析1.初始化2.销毁3.检查size与capacity是否溢出4.尾增功能(实现)5.打印三、实现具...
      99+
      2022-11-13
    • c语言指针的概念是什么
      C语言中的指针是一个变量,用于存储另一个变量的地址。简单来说,指针就是指向内存中某个位置的变量。指针的概念可以帮助我们实现一些高级的...
      99+
      2023-09-16
      c语言
    • c语言中cls的概念是什么
      在C语言中,"cls"是"clear screen"的缩写,用于清空控制台屏幕上的所有内容。它通常用于在控制台应用程序中清除之前输出...
      99+
      2023-09-29
      c语言
    • C语言数组的概念是什么及怎么应用
      这篇“C语言数组的概念是什么及怎么应用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言数组的概念是什么及怎么应用”文章吧...
      99+
      2023-06-30
    • C语言数据结构系列之树的概念结构和常见表示方法
      0x00 树的概念 树是一种非线性的数据结构,它是由 n(n >= 0)个有限节点组成的一个具有层次关系的集合。 ❓ 那么为什么叫 "树" 呢...
      99+
      2022-11-13
    • C语言中的程序结构是什么
      这篇文章主要介绍“C语言中的程序结构是什么”,在日常操作中,相信很多人在C语言中的程序结构是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中的程序结构是什么”的疑惑有所帮助!接下来,请跟着小编一起来...
      99+
      2023-06-08
    • C语言的概念和特点是什么
      本篇内容介绍了“C语言的概念和特点是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们都知道,C语言是一种计算机程序设计语言。它既有高级...
      99+
      2023-06-17
    • C++数据结构之堆的概念是什么
      今天小编给大家分享一下C++数据结构之堆的概念是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。堆的概念堆(heap)是计...
      99+
      2023-06-29
    • C语言二叉树的概念是什么及怎么使用
      本篇内容主要讲解“C语言二叉树的概念是什么及怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言二叉树的概念是什么及怎么使用”吧!1.二叉树的概念及结构 ①概念:一棵二叉树是结...
      99+
      2023-06-29
    • C语言顺序表的基本结构与实现思路详解
      目录一、顺序表的概念与结构1、线性表的解释2、顺序表概念解释二、顺序表的思路及代码实现详解1.静态顺序表的实现2.动态顺序表思路及代码实现2.1 动态顺序表的整体思路2.2 定义结构...
      99+
      2023-02-13
      C语言顺序表 C语言顺序表的创建
    • C语言中的DIV的用法及DIVAB概念是什么意思
      C语言中的DIV的用法及DIVAB概念是什么意思,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。你对DIV在C语言中的用法及DIVAB的概念是否...
      99+
      2022-10-19
    • C语言数据结构哈希表是什么
      这篇文章将为大家详细讲解有关C语言数据结构哈希表是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。#include <stdio.h>#include <stdli...
      99+
      2023-06-29
    • C语言异常处理机制的概念是什么
      这篇“C语言异常处理机制的概念是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言异常处理机制的概念是什么”文章吧。异...
      99+
      2023-06-17
    • c语言中用户标识符的概念是什么
      本篇内容介绍了“c语言中用户标识符的概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在c语言中,用户标识符是指用户根据需要自己定义的...
      99+
      2023-06-08
    • 怎么使​用Python仿照C语言来实现线性表的顺序存储结构
      今天小编给大家分享一下怎么使用Python仿照C语言来实现线性表的顺序存储结构的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
      99+
      2023-06-16
    • C语言编程简单却重要的数据结构顺序表全面讲解
      目录前言一、线性表定义二、顺序表实现1概念及结构2静态顺序表2.1实现顺序表接口,第一步要对顺序表进行初始化2.2对顺序表的增删查改的接口函数(以尾插为例)3动态顺序表3.1动态顺序...
      99+
      2022-11-12
    • Java数据结构链表的概念是什么与怎么实现
      本文小编为大家详细介绍“Java数据结构链表的概念是什么与怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java数据结构链表的概念是什么与怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、什么是...
      99+
      2023-06-29
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作