C语言数据结构——顺序表

在讲顺序表之前,要先对数据结构有所了解,数据结构是指计算机存储和组织数据的形式,其中包括了顺序表、链表、二叉树等。

接下来对顺序表进行讲解:

一.顺序表的特点:

1.顺序表的低层逻辑是数组,即是基于数组来实现的。

2.顺序表是线性表(具有相同特性的数据结构的集合,特性包括物理结构和逻辑特性)的一种。

3.线性表的物理结构:不一定连续,逻辑结构:一定连续。顺序表的物理结构:连续,逻辑结构:连续。所以得出第二点特点。

二.顺序表的分类:

1.静态顺序表(基于定长数组)

基本结构:struct SeqList

                 {

                   int arr[10];//定长数组

                   int size;//当前有效元素个数

                 } ;

2.动态顺序表(基于不定长数组)

基本结构:struct SeqList

               {

                 int*arr;//指针

                 int size;//当前有效元素个数

                 int capacity;//空间大小

               };

和动态数组相比,静态数组的长度固定,灵活性差,所以在用顺序表时往往用动态顺序表。接下来对动态顺序表进行代码演示。

三.代码演示:(实现方式有很多种,演示的并非最优代码)

在写工程时分为三个文件:SeqList.h   SeqList.c   test.c

test.c作为测试文件,用来测试实现顺序表各种功能的函数的功能是否正常

SeqList.h中包含了工程用到的各种头文件和对各种功能函数的声明

SeqList.c中包含了各种实现顺序表功能的函数的定义

1.SeqList.h文件

2.SeqList.c文件

①初始化和销毁(因为数组空间是用realloc动态开辟的,要及时释放,释放后要及时置为空,避免野指针)

②检测顺序表空间(在向顺序表中插入数据之前要先判断顺序表的空间是否足够,不够的话要为其扩容)

③打印顺序表(写一个循环,从头遍历数组,并把数据打印出来即可)

④头插、尾插

尾差要先判断空间是否足够,若足够直接在数组后面添加一个数组即可。

头差也要先判断空间是否足够,但要移动数据,再在头插入一个数据。如下图:要从后往前移,不能从前往后移,否则会造成数据覆盖。

⑤头删,尾删

尾删很简单只要将size--即可

头删要移动数据,再size--。如图:

这里要从前往后移动,否则也会造成数据覆盖。

⑥指定位置之前插入

与头插逻辑类似,只是把头改成了指定位置之前(其也可以完成头插功能),需要从指定位置从后往前移动数据,再插入数据。

⑦指定位置删除

从前往后移动数据,再size--即可:

⑧打印顺序表

按顺序把数据打印出来即可。

3.test.c测试文件

可以按自己的需要对所写函数的功能进行测试

上述就是我要说的顺序表的所有内容,顺序表还可以添加其他的功能,可根据自己的需求来尝试添加,文章有什么不足,欢迎大家指出。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,顺序表是一种常见的数据结构,它是一种线性表,元素按照顺序存储在连续的内存空间中。顺序表的查找操作是指在顺序表中根据给定的关键字查找对应的元素。 顺序表的查找可以分为两种常见的方式:顺序查找和二分查找。 1. 顺序查找(Sequential Search): 顺序查找是一种简单直接的查找方法,它从顺序表的第一个元素开始逐个比较,直到找到目标元素或者遍历完整个顺序表。具体步骤如下: - 从顺序表的第一个元素开始,依次与目标元素进行比较。 - 如果找到目标元素,则返回其在顺序表中的位置。 - 如果遍历完整个顺序表仍未找到目标元素,则返回查找失败。 2. 二分查找(Binary Search): 二分查找是一种高效的查找方法,但要求顺序表中的元素必须是有序的。它通过将目标元素与顺序表中间位置的元素进行比较,根据比较结果确定继续在左半部分还是右半部分进行查找,以此类推,最终找到目标元素或者确定不存在。具体步骤如下: - 将顺序表按照关键字的大小进行排序。 - 比较目标元素与顺序表中间位置的元素。 - 如果目标元素等于中间位置的元素,则返回其位置。 - 如果目标元素小于中间位置的元素,则在左半部分继续进行二分查找。 - 如果目标元素大于中间位置的元素,则在右半部分继续进行二分查找。 - 重复以上步骤,直到找到目标元素或者确定不存在。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值