用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.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;		
}
 
        

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM