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