用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