数据结构——线性表的定义与实现(一)

本文介绍了线性表的定义及其两种存储结构:顺序存储和链式存储。顺序存储通过数组实现,详细讲解了初始化、查找、插入和删除操作。链式存储部分讨论了求表长、按序查找、按值查找、插入和删除的方法,强调了单链表的特点和操作注意事项。
摘要由CSDN通过智能技术生成

线性表是由同一类型的数据元素构成的有序序列的线性结构。

线性表的基本操作:

  1. List MakeEmpty()
  2. ElementType FindKth(List L, int i)
  3. Position Find(List L, ElementType X)
  4. bool Insert(List L, ElementType X, int i)
  5. bool Delete(List L, int i)
  6. int Length(List L)

1. 线性表的顺序存储实现

/*这里的位置是数组的整形下标,从0开始;前面提到的位序是指第几个,从1开始。*/
typedef int Position;
typedef struct LNode * PtrToLNode;
struct LNode{
   
	ElementType Data[MAXSIZE];
	Postion Last;
};
typedef PtrToLNode List;
  • 为了体现数据组织的整体性,通常将数组Data和变量Last封装成一个结构作为顺序表的类型。
  • 由于LNode是一个包含数组的结构,当我们实现各种针对顺序表的操作时,直接将该结构作为函数参数传递显然不是个好方法,使用结构指针传递效率更高,所以把List定义为结构指针。
  • 结构指针——指向结构类型变量的指针。结构指针可以作为函数参数传递。相比于通过参数直接传递结构,将结构指针作为参数传递不仅可以在函数中修改结构指针所指向的内容,而且参数传递的效率会更高。
  • 使用List L 定义线性表L,通过L可以访问相应线性表的内容。
  • L->Data[i] 访问下标为 i 的元素
  • L->Last+1 得到线性表的长度

1.1 初始化

顺序表的初始化即构造一个空表。

  1. 动态分配表结构所需的存储空间
  2. 将表中Last指针置为 -1,表示表中没有数据元素
List MakeEmpty(){
   
	List L;
	L = (List)malloc(sizeof(struct LNode));
	L->Last = -1;
	return L;
}

1.2 查找

#define ERROR -1   /*将错误信息ERROR的值定义为任一负值都可以*/

Position Find(List L, ElementType X){
   
	Position i = 0;

	/*只有两种可能跳出循环:1.没有找到,不满足条件一; 2.找到了,不满足条件二*/
	while(i <= L->Last && L->Data[i] != X)
		i++;
		
	if(i > L->Last)
		return ERROR;
	else
		return i;
}

1.3 插入

顺序表的插入是指在表的第 i (1<= i <= n+1)个位序上插入一个值为 X 的新元素(即在第 i 个元素之前插入新元素),插入后使原长度为 n 的数组元素系列成为 n+1。

/*在L的指定位序 i 前插入一个新元素X; 位序为 i 元素的数组位置下标为 i-1*/
bool Insert(List L, ElementType X, int i){
   
	Position j;
	if(L->Last == MAXSIZE-<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值