C,C++ 顺序表基本操作的实现

线性表的顺序存储结构是一种随机存取的存储结构,高级语言中通常用数组来描述数据结构中的顺序储存结构。

#define MAXSIZE 100
typedef struct
{
	Elemtype *elem;				//储存空间的基地址 
	int length; 					//当前长度 
}SqList;

一. 初始化
顺序表的初始化操作就是构造一个空的顺序表。
1.为顺序表L动态分配一个预定义大小的数组空间,使elem指向这段路弄件这段空间的基地址。
2.将表的长度设置为0。

Status InitList(SqList &L) 
{//构建一个顺序列表L;
	L.elem = new ElemType(MAXSIZE);			//为顺序表分配一个大小为MAXSIZE的数组空间 
	if(!L.elem) exit(OVERFLOW) ;			//储存分配失败退出
	L.length = 0;							//空表长度为 0 
	return Ok; 
}

二.取值
取值操作是根据指定的位置序号 i ,获取顺序表中的第 i 个数据元素的值。
1.判断指定的位置序号 i 是否合理,(1 <= i <= L. length),若不合理,则返回ERROR。
2.若 i 合理,则将第 i 个数据元素L.elem[i - 1],赋值给参数e,通过e返回第 i 个数据元素的传值。

Status GetElem(SqList L,ElemType &e)
{
	if(i < 1 || i > L.length) return ERROR; 		//判断i是否合理,如果不合理返回ERROR
	e = L.length[i - 1];                            //elem[i - 1]单元储存第i个元素 
	return OK; 
}

三.查找
查找操作是根据指定的元素值 e ,查找顺序表中第 1 个与 e 相等的元素,若找到返回 i + 1,查找失败,返回 0 。
1.从第一个元素开始,一次和 e 比较若找到与 e 相等的元素 L.elem[ i ],返回 i + 1。
2.若查找失败返回 0 。

int LocateElem(SqList L,ElemType e)
{//在顺序表L中查找值为e的数据元素,返回其符号
	for(int i = 0; i < L.length; i++) 
		if(L.elem == e) return i + 1;				//若查找成功返回 i + 1
	return 0;										//若查找失败返回 0 
}

四.插入
1.判断插入位置 i 是否合法(i 的合法取值范围是 i <= i <= L.length + 1),若不合法返回ERROR。
2.判断顺序表的储存空间是否已满,若满返回ERROR。
3.将第 n 个至第 i 个位置的元素依次向后移动一个位置,空出第 i 个位置(i = n + 1 时无需移动)
4.将要插入的新元素 e 放入第 i 个位置。
5.表长加1。

Status ListInsert(SqList &L, int i, ElemType e)
{//在顺序表L中第i个位置插入新的元素e,i值的合法范围是1 <= i <= L.length+1
	if((i < 1) || (i > L.length + 1)) return ERROR; 		//i值不合法
	if(L.length == MAXSIZE) return ERROR;					//储存空间已满
	for(int j = L.length - 1; j >= i - 1; j--) 
	L.elem[j + 1] = L.elem[j];								//插入位置之后的元素后移 
	L.elem [i - 1] = e;										//将新元素e放入第 i 个位置
	++L.length;												//表长加1
	return OK; 
}

五.删除
1…判断删除位置 i 是否合法(i 的合法取值范围是 i <= i <= L.length + 1),若不合法返回ERROR。
2…将第 i + 1 个至第 n 个元素依次向前移动一个位置(i = n 时无需移动)。
3.表长减1。

Status ListDelete(SqList &L, int i,)
{//在顺序表L中第i个位置删除第i个元素,i值的合法范围是1 <= i <= L.length
	if((i < 1) || (i > L.length)) return ERROR; 		         //i值不合法
	for(int j = i; j < L.length - 1; j++) 
		L.elem[j - 1] = L.elem[j];								//被删除元素之后的元素前移 
	--L.length;													//表长加1
	return OK; 
}

文章借鉴:《数据结构》(C语言版)(第二版)人民邮电出版社;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值