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

顺序表的实现及其基本操作(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;
}
总结

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

你可能感兴趣的:(数据结构,链表,算法)