#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; }
