【数据结构】顺序表和链表

这篇具有很好参考价值的文章主要介绍了【数据结构】顺序表和链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.线性表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...

线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。

【数据结构】顺序表和链表,C数据结构,数据结构,链表

【数据结构】顺序表和链表,C数据结构,数据结构,链表

2.顺序表

2.1概念及结构

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

顺序表一般可以分为:

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

就是给定长度的数组和有效数据个数。

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

指的是在堆区开辟出来的动态数组,给定数据个数和容量空间大小。

2.2接口实现

静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空 间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间 大小,所以下面我们实现动态顺序表。

//顺序表的动态储存
typedef int SLDataType;
typedef struct SeqList
{
	SLDataType* a;	//指向动态开辟的数组
	int size;		//有效数据个数
	int capacity;	//容量空间的大小
}SL;

//基本增删查改接口
void SLInit(SL* ps);	//顺序表初始化

void SLPushBack(SL* ps,SLDataType x);	//顺序表尾插
void SLPushFront(SL* ps,SLDataType x);	//顺序表头插
void SLPopBack(SL* ps);		//顺序表尾删
void SLPopFront(SL* ps);	//顺序表头删

void SLInsert(SL* ps, int pos, SLDataType x);	//顺序表在pos位插入x
void SLErase(SL* ps, int pos);					//顺序表删除pos位的值
int SLFind(SL* psl, SLDataType x);				//顺序表查找
void SLPrint(SL* ps);		//顺序表的打印
void SLDestroy(SL* ps);		//顺序表的销毁

顺序表难度较低,接下来我们主要对链表进行刨析,理解了链表,顺序表就手到擒来了。

3.链表

3.1链表的结构及概念

概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的 。

其实链表就好比作一辆火车,由一条牵引链链接每一节车厢。

【数据结构】顺序表和链表,C数据结构,数据结构,链表

现实数据结构如下;

【数据结构】顺序表和链表,C数据结构,数据结构,链表

注意:

  1. 从上图可知,链式结构逻辑上是连续的,但是在物理上不一定是连续的。
  2. 现实中的节点是从堆区上申请出来的。
  3. 从堆区上申请出来的空间,是按照一定的策略分配的,可能连续,也可能不连续。

3.2链表的分类

链表可以分为8种链表结构:

1.单向或者双向

【数据结构】顺序表和链表,C数据结构,数据结构,链表

2.带头或者不带头

【数据结构】顺序表和链表,C数据结构,数据结构,链表

3.循环或不循环

【数据结构】顺序表和链表,C数据结构,数据结构,链表

还有俩种分别是:无头单向非循环链表、带头双向循环链表

【数据结构】顺序表和链表,C数据结构,数据结构,链表

1. 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结 构的子结构,如哈希桶、图的邻接表等等。

2. 带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都 是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带 来很多优势,实现反而简单了。

 3.3链表的实现

typedef int SLTDataType;
typedef struct SListNode
{
	SLTDataType data;
	struct SListNode* next;
}SLTNode;

SLTNode* BuySLTNode(SLTDataType x);		//动态申请节点
void SListPrint(SLTNode* plist);		//打印单链表

void SListPushBack(SLTNode** pphead, SLTDataType x);	//单链表尾插
void SListPushFront(SLTNode** pphead, SLTDataType x);	//单链表头插
void SListPopBack(SLTNode** pphead);	//单链表尾删
void SListPopFront(SLTNode** pphead);	//单链表头删

SLTNode* SLFind(SLTNode* phead, SLTDataType x);			//单链表查找

3.4双向链表的实现

typedef int LTDataType;
typedef struct ListNode
{
	LTDataType data;
	struct ListNode* next;
	struct ListNode* prev;
}ListNode;

ListNode* ListCreate();		// 创建返回链表的头结点.
void ListDestroy(ListNode* pHead);		// 双向链表销毁
void ListPrint(ListNode* pHead);		// 双向链表打印
void ListPushBack(ListNode* pHead, LTDataType x);	// 双向链表尾插
void ListPushFront(ListNode* pHead,LTDataType x);	// 双向链表头插
void ListPopBack(ListNode* pHead);		// 双向链表尾删
void ListPopFront(ListNode* pHead);		// 双向链表头删

bool LTEmpty(ListNode* pHead);

ListNode* ListFind(ListNode* pHead, LTDataType x);	// 双向链表查找
void ListErase(ListNode* pos);		// 双向链表删除pos位置的结点
void LTInsert(ListNode* pos, LTDataType x);		// 双向链表在pos的前面进行插入

4.顺序表和链表的区别

【数据结构】顺序表和链表,C数据结构,数据结构,链表

好啦,本节知识就到这啦,关注博主,让我们一起开码!! 文章来源地址https://www.toymoban.com/news/detail-807455.html

到了这里,关于【数据结构】顺序表和链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构初阶】顺序表和链表(1)

    线性表(linear list) 是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上

    2024年02月08日
    浏览(242)
  • 数据结构奇妙旅程之顺序表和链表

    ꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶ 个人主页:xiaoxieʕ̯

    2024年02月05日
    浏览(66)
  • 数据结构修炼第二篇:顺序表和链表

    第一章 时间复杂度和空间复杂度 第二章 顺序表,列表 第三章 栈和队列 第四章 二叉树 第五章 排序 作者:🎈乐言🎈 简介:🎈大一学生,目前在致力于c/c++/python,高数的学习,有问题尽管问我,关注后私聊! 持续更新专栏:《c进阶》,《数据结构修炼》 🚀 (优质好文持

    2024年02月02日
    浏览(118)
  • 【数据结构篇C++实现】- 线性表 - 顺序表和链表

    友情链接:C/C++系列系统学习目录 故事导入: 幼儿园放学时,一个班级的小朋友,一个跟着一个排队出校,有一个打头,有一个收尾,当中的小朋友每一个都知道他前面和后面的一个是谁,就如同一根线把他们串联了起来。如此具有像线一样的性质的表就叫线性表 线性表(

    2024年02月07日
    浏览(57)
  • 初阶数据结构之---顺序表和链表(C语言)

    线性表: 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构。线性表在逻辑上是线性结构,也就是说是连续的一条直线。但在物理上并不一定是连续的。线性表在物理上存储时,通常以 数组 和 链式结构 的形式存储。

    2024年02月22日
    浏览(67)
  • <数据结构>顺序表和链表的比较|缓存命中率

    💭前言:通过之前对顺序表和链表的实现,我们可以发现在增删查改某些操作上两者的效率前言有所差异,本篇文章将总结二者的异同。 顺序表的实现 http://t.csdn.cn/Lxyg2 单链表的实现 http://t.csdn.cn/rHgjG 双链表的实现 http://t.csdn.cn/j3amO 📚顺序表通过数组来实现的,所以在物理

    2024年02月05日
    浏览(52)
  • 数据结构(王道)——线性表之静态链表&顺序表和链表的比较

      如何定义一个静态链表     初始化静态链表:   静态链表的查找、插入、删除           创: 销:   增、删:   查:   顺序表、链表该如何选择?  

    2024年02月16日
    浏览(125)
  • 顺序表和链表【数据结构】【基于C语言实现】【一站式速通】

    目录 顺序表 顺序表的优点 顺序表的实现 1.结构体的定义 2.初始化数组  3.插入数据 4.其余接口函数的实现 5.释放内存 顺序表的缺陷 单向链表 单向链表的优点 单向链表的实现 1.链表的定义  2.链表的初始化 3.其余接口函数的实现 5.释放内存 单向链表的缺陷 双向链表 双向链

    2024年01月24日
    浏览(53)
  • 探索树形数据结构,通识树、森林与二叉树的基础知识(专有名词),进一步利用顺序表和链表表示、遍历和线索树形结构

      结点之间有分支,具有层次关系 树的定义 : 树 (tree)是n(n≥0)个有限集。 若n = 0,则称为空树; 若n 0,则它满足如下两个条件: 有且仅有一个特定的称为根(Root)的结点; 其余结点可分为m(m≥0)个互不相交的有限集T1,T2,T3,.....,Tm,其中每一个集合本身又是一棵树,并称为根的

    2024年02月01日
    浏览(53)
  • 顺序表和链表

    首先,数据结构中的顺序表和链表都属于线性表。何为线性表?线性表可以描述为: 具有相同数据类型的n个数据元素的有限序列。 形象理解线性表的要素: 幼儿园小朋友放学,需要在校内站成一队,等待家长来接。这是一个 有限 的序列。 总共有几个小朋友,称之为线性表

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包