【王道C语言中级阶段+数据结构】线性表的顺序表示代码笔记

*因借用C++引用语法,主体代码以C++为主,提及C语言


目录

顺序表的定义

静态分配

动态分配

顺序表的插入操作

插入函数

插入实现

顺序表的删除操作

删除函数

删除实现

顺序表的查找操作

查找函数

查找实现

顺序表的打印操作

打印函数

打印实现


顺序表的定义

静态分配

#define MaxSize 50//定义顺序表的最大长度 
typedef struct{
	ElemType data[MaxSize];//顺序表中的元素 (a[1],a[2],a[3]……a[n]) 
	int length;//当前顺序表中有多少个元素(n)
}SqList;//顺序表的类型定义(顺序表的别名)

动态分配

#define InitSize 100//定义表的初始最大长度
typedef struct{
	ElemType *data;//动态分配数组的指针 
	int capacity;//动态数组的最大容量
	int length;//动态数组的当前个数 
}SeqList;//顺序表的类型定义(顺序表的别名) 

C动态初始分配语句为

L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize); 

C++动态初始分配语句为

L.data=new ElemType[InitSize];


顺序表的插入操作

插入函数

bool ListInsert(SqList &L,int i,ElemType e)//在判断插入是否合法后,实现插入操作 
//L为被插入顺序表,i代表插入的位置(从1开始计数),e为要插入的元素 
{
	if(i<1||i>L.length+1)//判断要插入的位置是否合法
		return false;//如果不合法,返回错误 
	if(L.length>=MaxSize)//判断存储空间是否已满 
		return false;//如果已满,返回错误 

	for(int j=L.length;j>=i;j--)//从顺序表尾元素开始向后移动一位,直到移完i位置结束移动 
		L.data[j]=L.data[j-1];
	L.data[i-1]=e;//在i位置放入e元素(数组下标从零开始) 
	L.length++;//插入完元素后,顺序表长度加1 
	return true;//插入成功,返回正确 
}

插入实现

ret=ListInsert(L,i,e);//在表L中i位置插入e元素,并用ret判断是否报错 
if(ret)
{
	printf("插入成功\n");
	PrintList(L);//打印插入成功后的表L 
}
else
{
	printf("插入失败\n");
}

顺序表的删除操作

删除函数

bool ListDelete(SqList &L,int i,ElemType &e)//判断删除是否合法后,实现删除操作并读取被删除元素 
//L为被删减顺序表,i代表删除的位置(从1开始计数),e为被删除的元素
{
	if(i<1||i>L.length)//判断要删除的位置是否合法
		return false;//如果不合法,返回错误 
		
	e=L.data[i-1];//获取被删除的元素(数组下标从零开始) 
	for(int j=i;j<L.length;j++)//从i元素开始向前移动一位,移完结束移动 
		L.data[j-1]=L.data[j];
	L.length--;//删除完元素后,顺序表长度加1 
	return true;//删除成功,返回正确 
}

删除实现

ret=ListDelete(L,i,del);//删除表L中i位置del元素且获取del,并用ret判断是否报错 
if(ret)
{
	printf("删除成功\n");
	printf("删除元素值为 %d\n",del);//打印被删除的del元素 
	PrintList(L);//打印删除成功后的表L 
}
else
{
	printf("删除失败\n");
}
	

顺序表的查找操作

查找函数

int LocateElem(SqList L,ElemType e)//查找成功,返回位置,查找失败,返回0
//L为查找顺序表,e为被查找的元素
{
	int i;
	for(i=0;i<L.length;i++)//从头遍历全表查找元素 
		if(L.data[i]==e)//i处元素为查找元素e 
			return i+1;//返回元素在顺序表中的位置(数组下标从零开始,需返回i+1值) 
	return 0;//退出循环即为查找失败,返回0 
}

查找实现

ret=LocateElem(L,e);//查找表L中e元素,并用ret判断是否报错 
if(ret)
{
	printf("查找成功\n");
	printf("元素位置为 %d\n",ret);//打印e元素所在位置 
}
else
{
	printf("查找失败\n");
}

顺序表的打印操作

打印函数

void PrintList(SqList &L)//打印顺序表L 
{
	for(int i=0;i<L.length;i++)//以每个元素四个空格大小输出表中数据 
	{
		printf("%4d",L.data[i]);
	}
	printf("\n");
}

打印实现

PrintList(L);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值