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