顺序表的创建以及功能的实现

本文介绍了顺序表的创建、使用及其与链表的优缺点。顺序表采用数组方式存储,需预先分配空间,查询速度快但插入删除效率低。链表动态开辟空间,插入删除高效但查询慢。文章详细阐述了顺序表的结构体定义、内存开辟、初始化以及添加、删除、查找等操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

顺序表:(顺序存储)

表的创建及其使用:

首先说明一下:

  1. 封装函数中,(.h)头文件中包含(所需的头文件,全局变量(包含结构体),函数声明;
  2. 顺序表的存储特点,只要知道存储空间的首地址,其他的数据都能知道;
  3. 顺序表一般情况下采用类似数组的方法来存储;
    1. 顺序表相对链表的优缺点
      链表顺序表
      链表是动态开辟空间,只要计算机还有存储空间,就不会出现存满的情况;顺序表的空间是固定的,开辟好空间后,空间大小就不能动态增加;
      插入或者删除一个元素时,只需要改变指针指向即可;  效率低,每次插入和删除元素都要移动多个节点;   
      链表在删除某个节点后可以直接将该节点用free(该节点的地址)即可将该节点释放;  顺序表的删除存储数据的操作会产生存储空间的碎片;
      链表的查询速度慢,每次查找都要从头节点开始依次查询;循序表可以直接通过定义的下表来查找数据;

流程:

  1. 定义结构体变量:

 

结构体里面不需要定义结构体指针时,结构体的名字可以省略,但重定义的名字必须要有。

这里可以把里面输入的变量的数据类型重定义,方便修改,数组的大小也同样可以;

  1. 先是给结构体开辟空间,malloc的返回值为开辟空间的首地址,所以要用结构体类型的指针来定义:

 

开辟完后要判断是否开辟成功,如果没有开辟成功,就返回一个NULL;

2.1:因为这里使用的是malloc,开辟的内存空间是在堆上,所以需要手动释放开辟的空间,不能多次释放,不然会报段错误;

2.2 开辟空间时要注意开辟空间的数据类型,有具体的数据类型前面要加强转;

3 结构体的初始化:

 

Memset() 这个就是用来初始化的函数,后面的三个参数分别为:

  1. 要初始化空间的首地址;
  2. 要初始化为多少;
  3. 要初始化的空间大小;

这些基本的准备整完之后:

//就是对顺序表的应用(操作):

第一部分为通用的操作:

要用表就要先判断表是否存在,如果存在就考虑表是否存满,是否为空:

  1. 再使用表之前要先判断表是否存在:

 将表的地址作为参数传入,存在就继续执行功能模块;

不存在就返回NULL,结束程序

  1. 考虑是否存满(因为是顺序表所以不考虑存满后再加新的内存):

                如果要增加内容,必须考虑该判断;

存满就是当表的下标和所定义可存储的数据量相同相同时

 2.考虑是否为空:

        当要删除数据时,就要先判断表中是否有数据;

判断方法同判满,当下标为初始化的数值时,表为空; 

3.测量该结构体中数组的有效长度(没有数有效长度就为0,index为-1;)

有效长度的计算逻辑和数组的类似,长度为下标加一

 

第二部分:

1.增加内容的思路:(通用操作就不再复述了)

  1. 先判断该位置与该结构体中数组有效长度的关系;
  2. 如果位置在这个数组中,将从该位置之后的元素通过循环赋值依次后移一位,最后将该位置的值修改为要插入的。

 

2 删除数据的思路与增加类似

2.1 第一种是通过输入数据直接删除:

1. 通过循环判断来确定要删除的数据的位置

2.在找到该位置后在进行循环移位来覆盖掉该位置的数据;

 

2.2通过输入位置来删除数据

  1. 先判断改位置里是否有数据,有数据进行循环
  2. 确定开始位置后,判断结束位置,从开始位置开始通过循环将后面的数据依次前移一位

 

3.查找数据的理解及思路

3.1 通过位置来查看该位置的内容:

1.直接判断输入的位置是否超过数组下标的最大值(数组的有效长度减一跟这个一样)

2.判断完后,如果存在直接返回该位置的数据即可;

 

3.2 通过数据来查看数据的位置

1.直接通过循环来比较数组里的元素是否有与输入的数据相同的

2.有相同直接返回此时数组元素的下标,没有相同的返回-1结束程序;

 

4 顺序表的清零和顺序表的销毁

4.1顺序表的清零:

1.直接令下标index为-1,数组全部不进行赋值遍历

 

4.2 顺序表的销毁

1.顺序表要销毁,必须使指针清零,也就是将指向顺序表的指针的地址赋NULL才能释放开辟的空间。

2.*sqlist是一级指针,必须使用二级指针指向该指针的地址才能达到销毁的目的;(传参时要注意,传递是&sqlist)---sqlist是顺序表的首地址

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值