数据结构-顺序表构建及其基本操作

顺序表的实现及其基本操作(C语言实现)

总述

顺序表是最简单的数据结构之一,在计算机中顺序表一般以数组的形式保存,我们都知道数组是线性保存的,因此顺序表也是线性保存的,线性表的连续存储值得是在计算机中用一块连续的存储空间保存线性表的元素,所以线性表的相邻元素是保存在连续的存储单元上的。

顺序表的储存结构
typedef struct {
	Elemtype* elem;//储存空间基地址
	int length;//当前顺序表长度
}SqList;
顺序表基本操作的实现
1.顺序表的初始化

顺序表的初始化即为构造一个空的顺序表。
(1):分配一个预定义大小空间的顺序表,使elem指向这块空间的基地址。
(2):将表长度设为0.
代码实现:

int InitList(SqList& L) {
	L.elem = new Elemtype[MAXSIZE];//分配预定义大小的空间
	if (!L.elem) exit(OVERFLOW);//如果分配失败则退出
	L.length = 0;//设置表长度为0
	return 1;
}
2.顺序表的取值

传入一个序号i,然后根据传入数据i获取到该顺序表第i个元素的值。
(可以直接通过数组下标定位到第i个数据元素)
(1):判断i是否合理(即是否在表长合理范围内)
(2):如果i值合理,则把第i个数据元素赋值给参数,返回该参数即可
代码实现:

int GetElem(SqList L, int i, ElemType& e) {
	if (i<1 || i>L.length) {
		return -1;
	}
	e = L.elem[i - 1];
	return 1;
}
3.顺序表的查找

给出指定元素的值,然后查找该顺序表中,查找成功则返回该元素在表中的位置
(1):遍历该表,和传进来的数据进行比较,如果查找到返回该元素序号,查找失败返回0
代码实现:

int LocateElem(SqList L, ElemType e)
{
	for (int i = 0; i < L.length; i++)//从低位置查找
	{
		if (L.elem[i] == e)
			return i;
	}
	return 0;
}
4.顺序表的插入

即在传入的第i个位置插入一个新的数据元素。
(1):判断插入位置是否合法
(2):判断顺序链表的储存空间是否已满
(3):将第i到第n个数据依次向后挪一个位置
(4) : 将待插入元素放入第i个位置
(5):表长加一
代码实现:

int ListInsert(SqList& L, int i, ElemType e) {
	if ((i < 1) || (i > L.length + 1)) {
		return -1;
	}
	if (L.length = MAXSIZE) {
		return -1;
	}
	for (int j = L.length - 1;j >= i -1;j--) {
		L.elem[j + 1] = L.elem[j];
	}
	L.elem[i - 1] = e;
	++L.length;
	return 1;
}
6.顺序表的删除

该操作是将传进来的第i个元素删除,然后将表的长度变为n-1个。
(1):判断穿进来的i是否合法
(2):将i+1到第n个元素依次向前挪动一个如果被删除元素为该顺序链表的最后一个,则不用向前挪动。
(3):表长-1.
代码实现:

bool ListDelete(SqList& L, int i) {
	if ((i < 1) || (i > L.length + 1)) {
		return false;
	}
	for (int j = i;j <= L.length - 1;j++) {
		L.elem[j - 1] = L.elem[j];
	}
	--L.length;
	return true;
}
7.顺序表的添加数据

传入一个n,这个n为添加数据数量,然后根据循环依次向后添加数据。
(1):判断n是否在合法范围内,即n是否大于0或小于该顺序链表的最大储存值。
(2):循环向表内添加数据,表长依次+1.
代码实现:

bool CreateList(SqList& L, int n)
{
	if (n<0 || n>MAXSIZE)false;
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &L.elem[i]);
		L.length++;
	}
	printf("sucess!!");
	return true;
}
总结

这即使顺序表基本操作,顺序表算是数据结构这门课中比较简单的一种数据结构,博主也是初学者,如有不对希望大家批评指正。

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值