#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.n==maxsize){//表满则无法插入 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; }
