数据结构 ----- 线性表

线性表的定义

线性表是零个或多个数据元素的有限序列,而线性表又分为顺序存储结构链式存储结构两种。

  1. 首元素无前驱
  2. 尾元素无后继
  3. 中间元素只有一个前驱和一个后继

线性表的顺序存储结构

#define MAX_SIZE 100	//线性表最多能存放多少个数据 

typedef int ElemType;	//以后可直接再次出修改 类型 

typedef struct 
{
	ElemType data[MAX_SIZE];		//数据 
	int length;						//线性表的表长 
}SList;

注意线性表的长度和数组的长度,线性表的长度不能大于数组的长度

线性表的操作

//线性表的初始化 
void SListInit(SList* L);

//打印表
void SListPrint(SList* L);

//头插
void SListPushFront(SList* L, ElemType val);

//尾插
void SListPushBack(SList* L,ElemType val); 


//找到val在表中的位置  找不到报错 
int SListFind(SList* L, ElemType val);

//头删
void SListPopFront(SList* L);

//尾删
void SListPopBack(SList* L);


//线性表的插入		在 src 的位置上插入 
void SListInsert(SList* L,ElemType src, ElemType val); 

//线性表的删除
void SListDele(SList* L, ElemType val);


//线性表的修改	将src的值 修改成 val 
void SListModify(SList* L, ElemType src, ElemType val); 

//销毁线性表 
void SListDestroy(SList* L);

//是否为空 为空 则返回 true 否则 返回 false 
bool SListEmpty(SList* L);

以上就是一些用的操作函数了。
这些函数的实现主要用到的也就是数组的知识了。

1.插入

首先,判断数组长度是否可以再插入。
然后,找到需要插入的位置即可
void SListInsert(SList* L,ElemType src, ElemType val)
{
	assert(L->length <= MAX_SIZE);
	
	//找到合适的位置
	int index = SListFind(L, src);
	int i;
	//将所有元素全部向后移动
	for (i = L->length; i >= index; i--)
	{
		L->data[i+1] = L->data[i];
	}
	//最后插入
	L->data[index] = val;
	L->length++;
}

2.删除

而删除与插入正好是相反的,只需要找到和是的位置,然后直接将所有的元素向前移动即可。
//线性表的删除
void SListDele(SList* L, ElemType val)
{
	//无元素则无需删
	assert(L->length != 0);
	//找到合适的位置
	int index = SListFind(L, val);
	int i;
	//向前挪动
	for (i = index; i < L->length-1; i++)
	{
		L->data[i] = L->data[i+1];
	}
	L->length--;
}

总结

用数组来首先线性表其实是一个很简单的数据结构,增删查改。但是你会发现就是在增和删的时候,会有大量的数据进行前移或后移,要是数据元素多的情况下,会大大消耗时间,并不是很好。
所以在此基础上又引出了链式存储结构------链表

  • 最坏情况下:
  • 插入 O(n)
  • 删除 O(n)
  • 按位查找 O(1)
  • 按值查找 O(n)

顺序表源码链接
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值