C语言实现--顺序表(顺序存储结构)

写在前面:


        关于“顺序表”的分析等,如果存在疑惑,想要探究过程,请读者参见文章:

                                   “顺序表(详解)- C++(线性表顺序存储结构)”

        之后再回到这个页面看C语言实现“链队列”, 为提高效率在这里不再重复进行分析介绍,C++与C语言分析过程相同,两者代码实现主要区别在于“编程语法”上,读者可以对比两篇文章中的代码部分体会。

代码实现


        说明:采用C语言,编译环境为DevC++。

//导入头文件
#include<malloc.h>
#include<stdio.h>

//定义线性表
typedef struct{
	int *elem;//数据元素
	int length;//当前长度
	int listsize;//存储容量
}SqList;

//初始化线性表
void InitSqList(SqList &L){
	L.elem=(int *) malloc(50*sizeof(int));
	L.length=0;//空表
	L.listsize=50;
}

//创建顺序表 
void CreatSqList(SqList &L){
	 int i=0;
	 printf("请输入数据,以-10000结束:\n");
	 scanf("%d",&L.elem[i]);
	 while(L.elem[i]!=-10000 && L.length<L.listsize){
		 ++L.length;
		 i++;
		 scanf("%d",&L.elem[i]);
	 }
}

//输出
void PrintSqList(SqList &L){
	int i;
	printf("\n线性表中的全部元素为:\n");
	for(i=0;i<L.length;i++){
		printf("%d ",L.elem[i]);
	}
	printf("\n\n");
}

//查找,若不存在输出0
int LocateSqList(SqList L,int e){
	int i=0;
	int *p=L.elem;
	while(i<L.length){
		p++;
		i++;
		if((*p)==e)
			return i+1;
		if(i==L.length) 
			return 0;
	}
}

//插入
int InsertSqList(SqList &L,int i,int h){
	int *p;
	int *q;
	p=&(L.elem[L.length+1]);
	q=&(L.elem[i-1]);
	for(p;p>=q;p--)
		*p=*(p-1);
	++L.length;//插入前 表长+1 
	*(q)=h;
	return 0;//返回0表示成功
}

//删除
int DeleteSqList(SqList &L,int m){
	int *p;
	int *q;
	p=&(L.elem[L.length]);
	q=&(L.elem[m]);
	for(q;q<p;q++)
		*(q-1)=*q;
	--L.length;//删除后 表长-1 
	return 0;//返回0表示成功
}

//主函数
int main(){
	SqList L;
	int e;
	int i;
	int h;
	int m;
	InitSqList(L);
	CreatSqList(L);
	PrintSqList(L);
	printf("请输入要查找的数据元素:\n");
	scanf("%d",&e);
	printf("数据 %d 在表中第 %d 个位置。\n",e,LocateSqList(L,e)); 
	printf("请输入第几个位置插入数据元素:\n");
	scanf("%d",&i);
	printf("请输入要插入的新数据元素:\n");
	scanf("%d",&h);
	printf("%d\n",InsertSqList(L,i,h));
	PrintSqList(L);//输出更改后的线性表
	printf("请输入第几个位置删除数据元素:\n");
	scanf("%d",&m);
	printf("%d\n",DeleteSqList(L,m));
	PrintSqList(L);//输出更改后的线性表
}

运行结果

写在最后:

        读两遍下来,如果仍然有不清楚的地方,可在评论区留言。

        如果你有其他感到困惑的问题,欢迎留言。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等日出看彩虹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值