数据结构-线性表

1 线性表知识框架

在这里插入图片描述
线性结构:结构中的元素只存在一对一的关系
树形结构:一对多
图装结构:多对多
在这里插入图片描述

2 顺序存储-顺序表

定义:

#define MaxSize 100
int struct{
	int data[MaxSize];
	int length;
}list; //静态分配

int struct{
	int *data;
	int length,MaxSize;
}list;

data = new int[MaxSize];  //动态分配

例:
main()
{
	cout<<"请输入数组的大小:";
	cin>>MaxSize;
	data = new int[MaxSize];
}

最大特点:随机存取,可在时间O(1)内进行存取

3 链式存储

3.1 单链表

定义:

typedef struct Node
{
	int data;
	struct Node *next;
}Node;

优点:离散的存储在内存空间中,不需要连续的大量的地址。
缺点:指针域的存在,浪费了存储空间,且因为是离散,所以是非随机存取,即不能直接找到表中的某个特定节点,需要从头开始遍历。

头结点的优点:
1.使链表内每个结点的操作统一。
2.使头指针指向的链表永远非空。

单链表基本操作:
1.头插法建表
在这里插入图片描述

// L 头指针  s 新建结点
s -> next = L -> next;
L -> next = s;

2.尾插法建表
在这里插入图片描述

//L 头指针  r 指向尾结点  s 新结点
r -> next = s;
r = s;

3.插入结点
在这里插入图片描述

// p 插入位置的前驱结点  s 新结点
s -> next = p -> next;
p -> next = s;

4.删除结点
在这里插入图片描述

// p 删除结点的前驱  q 将被删除的结点
q = p -> next;
p -> next = q -> next;
free(q);

3.2 双链表

定义:

typedef struct DNode
{
	int data;
	struct DNode *prior,*next;
}DNode;

1.插入
在这里插入图片描述

p -> next -> prior = s;
s -> next = p -> next;
s -> prior = p;
p -> next = s; // 这一步必须放在 1 ,2 句后面

2.删除
在这里插入图片描述

p -> next = q -> next;
q -> next -> prior = p;
free(q);

3.3 循环链表

1.循环单链表:表中的最后一个结点指向头结点
在这里插入图片描述

2.循环双链表:头结点的prior指向尾结点,尾结点的next指向头结点
在这里插入图片描述

3.4 静态链表

定义:

# define MaxSize 100
typedef struct
{
	int data;
	int next;
}Node[MaxSize];  // 结构体数组

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性是一种常见的数据结构,它示具有相同数据类型的一组元素的有序序列。线性中的元素之间存在一种顺序关系,每个元素都有一个前驱和一个后继(除了第一个元素没有前驱,最后一个元素没有后继)。线性可以用顺序存储结构或链式存储结构实现。 在顺序存储结构中,线性的元素按照顺序存储在连续的内存空间中,可以通过元素的下标来访问和操作元素。插入或删除元素时,需要移动其他元素,因此操作的时间复杂度较高。 链式存储结构中,线性的每个元素都包含一个数据域和一个指针域,指针指向下一个元素。通过指针的链接,元素可以按照任意顺序存储在内存中,插入和删除操作只需要改变指针的指向,因此时间复杂度较低。 线性常见的操作包括插入、删除、查找、获取长度等。其中插入和删除操作需要注意保持线性的顺序关系。 常见的线性有数组、链、栈和队列。数组是最简单的线性,通过下标可以直接访问元素;链是动态存储结构,插入和删除操作方便,但访问元素需要遍历链;栈是一种特殊的线性,只允许在的一端进行插入和删除操作;队列也是一种特殊的线性,只允许在的一端进行插入操作,在另一端进行删除操作。这些数据结构在实际应用中都有各自的应用场景和优缺点。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值