线性表顺序存储的一些操作(初始化,添加,删除)

岁酱吖の 提交于 2020-03-03 20:03:01

最近有时间学一些自己想学的,就找来看看数据结构。看的是大话数据结构。之前学数据结构是大一时候,现在看这个还可以,没那时候学的累。但是还是需要进行一些总结,以免自己会忘记。
虽然大部分和书上差不多,但是不自己动手敲,还是会有问题。或者有些地方自己这样写会好理解一些。

一.线性表顺序存储

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

接下来我们对线性表结构进行了解

#define MAXSIZE 200
typedef struct{
	Elemtype data[MAXSIZE];
	int length;
}Sqlist;

这里的长度指的是线性表长度,是线性表中数据元素的个数。我们对线性表进行操作,这个量是变化的。
其实线性表的顺序存储就是数组,但是这个长度是变化的,可以这么理解。

二.一些操作

1.初始化线性表

Sqlist *InitList(int n,int t)
{
	Sqlist *L;
	L = (Sqlist *)malloc(sizeof(Sqlist));
	L->length = n;
	for(int i = 0; i < n; i++)
	L->data[i] = t*i;
	return L;
}

这里的t是随便给的值,n是长度。

2.获得元素

Status GetElem(Sqlist *L,int i,Elemtype *e)
{
	if(i < 1 || i > L->length)
	return ERROR;
	if(L->length == 0)
	return ERROR;
	*e = L->data[i-1];
	return OK;
}

这里主要是记得要判断分界条件,不然有时候没输出会觉得很奇怪。

3.增加元素

Status InsertElem(Sqlist *L,int i,Elemtype e)
{
	int k;
	if(i < 1 || i > L->length)
	return ERROR;
	if(L->length ==0)
	return ERROR;
	for(k = L->length - 1;k >= i -1;k--)
	L->data[k+1] = L->data[k];
	L->length++;
	L->data[i-1] = e;
	return OK;
}

这里需要注意的是,从最后一个元素进行遍历,不然从前开始,中间的数都会被覆盖掉。还有别忘了改线性表长度。

4.删除元素

Status DeleteElem(Sqlist *L,int i,Elemtype *e)
{
	int k;
	if(i < 1 || i > L->length)
	return ERROR;
	if(L->length ==0)
	return ERROR;
	*e = L->data[i-1];
	for(k = i;k<L->length;k++)
	L->data[k-1] = L->data[k];
	L->length--;
	return OK;
}

这里和上面类似,不是很难理解。

三.线性表的优缺点

在这里插入图片描述
第一次用markdown,不是很适应,就用截图了。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!