用C语言编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。

#include<stdio.h>
#include<stdlib.h>
#define maxsize 30

typedef int datatype;
typedef struct seqlist{
datatype data[maxsize];
int n;
}seqlist;
struct seqlist L;

//顺序表初始化1-20
void Stu() {
printf("\n顺序表正在初始化…\n\n顺序表能储存的数据最多为30个\n\n\n");
int temp=0,n=0;
for(temp=0;temp<20;temp++){
L.data[temp]=temp+1;
n++;
}//自定义1-20的数据方便检测程序
L.n=n;//改变顺序表长度
};

//输出顺序表当前储存的数据
void Show(){
int temp;
printf("\n\n顺序表当前储存的数据:\n “);
for(temp=0;temp<L.n;temp++){//利用长度输出已储存的数据
printf(” %d “,L.data[temp]);
}
printf(”\n");
}

//在顺序表中输入数据
void inList(){
int newn,temp;
reset1:
printf("\n请输入需要储存的数据个数:\n");
scanf("%d",&newn);
if(newn>maxsize){
printf("\n顺序表最多储存%d个数据!\n",maxsize);
goto reset1;
}
printf("\n请输入你需要储存的数据:\n");
for(temp=0;temp<newn;temp++){
scanf("%d",&L.data[temp]);
}//输入\更改数据
for(temp=newn;temp<L.n;temp++){
L.data[temp]=0;
}//将不需要储存的数据置零
L.n=newn;//更新顺序表长度
printf("\n你插入的数据为:");
for(temp=0;temp<newn;temp++){
printf("%d\t",L.data[temp]);
}
}

//在顺序表中查找某一个逻辑位置的数据并输出
void search1(){
int x;
reset2://判断输入的逻辑位置
printf("\n请输入你需要在顺序表中查找的逻辑位置:\n");
scanf("%d",&x);
if(x<1||x>maxsize){
printf("\n逻辑位置最低为1,最高为30!\n");
goto reset2;
}
int temp;
for(temp=0;temp<L.n;temp++){
if(x==(temp+1)){
printf("\n顺序表中这个位置的数据为%d\n",L.data[temp]);
return ;
}
}
printf(“顺序表中的这个逻辑位置未储存数据!\n”);
}

//在顺序表中查找数据输入它的逻辑位置
void search2(){
int x;
printf("\n请输入你需要在顺序表中查找的数据:\n");
scanf("%d",&x);
int temp;
for(temp=0;temp<L.n;temp++){
if(L.data[temp]==x){
printf("\n查找成功!\n它在顺序表中的逻辑位置为%d\n",temp+1);
return ;
}
}
printf(“在顺序表中未找到这个数据!”);
}

//在顺序表中插入数据
void insert(){
if(L.nmaxsize){//表满则无法插入
printf(“当前顺序表已储存了30个数据,无法插入!\n”);
return;
}
if(L.n
0){//表空则无法插入
printf(“当前顺序表没有储存数据,无法插入!\n”);
return;
}
int p,x,temp1;
reset3://判断输入的逻辑位置
printf("\n请输入你在顺序表中需要插入数据的逻辑位置:\n");
scanf("%d",&p);
if(p<1||p>L.n){//插入的逻辑位置不能是顺序表的前驱和最后的后继
printf("\n插入的逻辑位置最小为1,最高为%d!\n",L.n);
goto reset3;
}
printf("\n请输入该数据:\n");//提示输入并输入
scanf("%d",&x);
for(temp1=L.n;temp1>=p;temp1–){
L.data[temp1+1]=L.data[temp1];
}
L.data[p]=x;
L.n++;
printf("\n插入数据后变为:");
for(temp1=0;temp1<L.n;temp1++){
printf("%d\t",L.data[temp1]);
}
}

//删除顺序表中的某个位置的数据
int deletel(){
if(L.n==0){//表空无法删除
printf(“当前顺序表没有储存数据,无法删除!\n”);
return;
}
int p,temp;
reset4:
printf("\n请输入你在顺序表中需要删除的数据的逻辑位置:\n");
scanf("%d",&p);
if(p<1||p>L.n){
printf(“该逻辑位置没有储存数据!”);
goto reset4;
}
L.n–;
for(temp=p;temp<=L.n;temp++){
L.data[temp-1]=L.data[temp];
}
printf(“删除数据后变为:”);
for(temp=0;temp<L.n;temp++){
printf("%d\t",L.data[temp]);
}
}

main(){
Stu();//顺序表初始化1-20
inList();//输出顺序表当前储存的数据
search1();//在顺序表中查找某一个逻辑位置的数据并输出
search2();//在顺序表中查找数据输入它的逻辑位置
insert();//在顺序表中插入数据,并输出
deletel();//删除顺序表中的某个位置的数据,并输出其他的元素
return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值