C语言顺序表操作

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
void create(struct link &L); 
void show(struct link L);
void getelem(struct link L,int n);
void insert(struct link &L,int n);
void del(struct link &L,int n);
void sort(struct link &L);
void reverse(struct link &L);
struct link{
	int *data;       //创建指向存储空间的指针 
	int length;    	//定义顺序表的长度 
}; 
int main(){
	char c; 
	int i; 
	struct link L; 
	int arr[MAX_SIZE];  //创建一个长度为10的int数组 
	L.data =  arr;		//让指针指向这片空间 
	L.length = 0;  		//初始化顺序表的长度为0 
	while(true){
	printf("请选择你想要执行的操作:\n1.创建顺序表\n2.查找指定位置元素\n3.插入元素\n4.删除指定位置元素\n5.排序\n6.逆序\n7.退出程序\n");
	scanf(" %c",&c);
	if (c=='1'){
	create(L);
	show(L);
	}else if(c=='2'){
	printf("你想要查询的索引是:\n");
	scanf("%d",&i);
	getelem(L,i);
	} else if(c=='3'){
	printf("你想要插入的位置是:\n");
	scanf("%d",&i);
	insert(L,i);
	} else if(c=='4'){
	printf("你想要删除的位置是:\n");
	scanf("%d",&i);
	del(L,i);
	} else if(c=='5'){
		sort(L);
		show(L);
	}else if(c=='6'){
		reverse(L);
		show(L);
	}else{
		exit(0);
	}
}
	return 0;
}
//由于需要对数组空间进行操作,所以需要传入L的地址 
void create(struct link &L){
	int n;
	printf("请输入创建元素的个数:\n");
	scanf("%d",&n);
	printf("请输入数据:\n");
	for(int i=0;i<n;i++){
		scanf("%d",&L.data[i]);
		L.length++;
	}
}
void show(struct link L){
	for(int i=0;i<L.length;i++){
		printf("%d ",L.data[i]);
	}
	printf("\n");
}
void getelem(struct link L,int n) {
	if(n<1||n>L.length){
		printf("不存在此索引!\n");
		return ;
	}
	printf("第%d位置的元素是%d\n",n,L.data[n-1]);
}
void insert(struct link &L,int n){   //在第n号位进行插入,插入位置为1~L.length之间 
	if(n<1||n>L.length+1){
		printf("插入位置错误!\n");
		return ;
	}else if(L.length == MAX_SIZE){
		printf("顺序表已满,无法插入!\n");
		return;
	}else{
		int d;
		printf("请输入插入的数据:\n");
		scanf("%d",&d);
		for(int j = L.length-1;j>=n-1;j--){   //从最后一位开始,将每一个元素的值赋给下一位 
			L.data[j+1] = L.data[j];
		}
		L.data[n-1] = d;   //给第n号位赋值 
		L.length++;
	show(L);	
	}
}
void del(struct link &L,int n){
	if(n<1||n>L.length){
		printf("删除位置错误!\n");
		return ;
	}else{
		for(int j=n;j<=L.length-1;j++){   //从第n号位开始,依次将后一位的元素值覆盖前一位的元素值 
			L.data[j-1] = L.data[j];
		}
		L.length--;        		//表长-1 
	}
	show(L);	
}
void sort(struct link &L){
	int temp;
	for(int i=0;i<L.length;i++){      //采用冒泡排序 
		for(int j=0;j<L.length-i-1;j++){
			if(L.data[j]>L.data[j+1]){
				temp = L.data[j];
				L.data[j] = L.data[j+1];
				L.data[j+1] = temp;
			}
		}
	}
}
void reverse(struct link &L){
	int temp;
	int i =0;
	while(i<L.length/2){    //将左右的元素值互换 
		temp = L.data[i];
		L.data[i] = L.data[L.length-i-1];
		L.data[L.length-i-1] = temp;
		i++;
	}
	
}

C语言顺序表操作

C语言顺序表操作