学习1:顺序表与链表的区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

线性表可以用顺序表或链表存储


两种存储表示各有哪些主要优缺点?

一、线性表是什么?

线性表存在唯一的一个称作“第一个”的元素;
存在唯一的一个称作“最后一个”的元素;
除第一个元素外,集合中的每一个元素均只有一个直接前趋;
除最后一个元素外,集合中的每个元素均只有一个直接后趋。

二、顺序表和链表

1.顺序表

代码如下(示例):

#define maxSize 100
typedef int DataType;
typedef struct{
	DataType data[maxSize];
	int n;
}SeqList;

2.顺序表的插入与删除

插入数据在这里插入图片描述

删除数据

在这里插入图片描述

3.链表(单链表)

代码如下(示例):

typedef int DataType;
typedef struct node{
	DataType data;
	struct node* link;
}LinkNode,*LinkList;

4.链表的插入与删除

代码如下(示例):

插入数据

int Insert(LinkNode* L,int k,int elem){
	LinkNode* p,*q;
	if(k==1) p=L;			//元素elem插入在第一个元素位置
	else p=Locate(L,k-1);	//查找表中的第k-1个元素
	if(p==NULL) return 0;	//表中不存在第k-1个元素,插入失败
	q=new LinkNode;			//创建插入结点
	if(q==NULL) return 0;
	q->data=elem;
	q->link=p->link;
	p->link=q;				//元素elem插入第k-1个元素之后
	return 1;
}

删除数据

int Remove(LinkNode* L,int k){
	LinkNode* p,*q;
	if(k==1) p=L;			//删除第一个元素结点
	else p=Locate(L,k-1);	//查找表中的第k-1个元素
	if(p==NULL) return 0;	//表中不存在第k-1个元素,插入失败
	q=p->link;				//令q指向第k个元素结点
	p->link=q->link;
	free(q);				//删除结点
	q=NULL;		
	return 1;
}

总结

两种存储表示的优缺点:
顺序表的优点:
1.从时间上讲,它不但可以顺序存取,还可以直接存取,访问速度快;
2.从空间上讲,它的存储利用率高,不需要指针。
顺序表缺点:
1.从时间上讲,顺序表在插入或删除时,如果需要保持原来的顺序,必须移动平均一半的元素,因此更新速度慢;
2.从空间上讲,如果采用静态分配的存储结构,一旦存储数组的空间已满,不能扩充,再插入新元素将导致溢出。

链表的优点:
1.从时间上讲,插入或删除操作不需要大量移动元素,只需要修改指针,更新速度快;
2.从空间上讲,链表基本没有满和溢出的问题,只要内存可以分配结点,就可以扩充。
链表的缺点:
1.从时间上讲,链表只能顺序访问,所以查找一个元素平均要搜索半个表,访问速度慢;
2.从空间上讲,每个元素需附加一个指针,存储利用率较低;
此外,链表的单线联系的特性,如果操作不当,导致断链,将会丢失后面的所有的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凛~LINXUEWEN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值