一、代码
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct{
ElemType elem[MAXSIZE];
int length;
}SqList;
void outlin(SqList s); //打印表内容
void create(SqList *v); //创建顺序表
void insert(SqList *v,int i,int x); //插入数据
int findx(SqList v,int x); //查找数据
void deleter1(SqList *v,int i); //基于位置删除数据
void deleter2(SqList *v,int x); //基于内容删除数据
int main(){
SqList pz;
int i,x,cord;
do{
printf("\n 主菜单\n");
printf(" 1 建立线性表\n");
printf(" 2 插入一个元素\n");
printf(" 3 基于位置删除一个元素\n");
printf(" 4 基于内容删除元素\n");
printf(" 5 查找元素\n");
printf(" 6 结束程序\n");
printf("-------------------------\n");
printf("请输入您的选择(1,2,3,4,5,6) :");
scanf("%d",&cord);
switch(cord){
case 1:{
create(&pz); //创建线性表
outlin(pz); //输出表内容
}break;
case 2:{
printf("\n 请输入插入的位置 i:");
scanf("%d",&i);
printf("\n 插入的数据 x:");
scanf("%d",&x);
insert(&pz,i,x); //在位置i上插入数据x
outlin(pz); //输出表内容
}break;
case 3:{
printf("\n 请输入删除的位置 i:");
scanf("%d",&i);
deleter1(&pz,i); //删除位置i上的数据
outlin(pz); //输出表内容
}break;
case 4:{
printf("\n 请输入删除的数据 x:");
scanf("%d",&x);
deleter2(&pz,x); //删除值为x的数据
outlin(pz);
break;
}
case 5:{
printf("\n 请输入要查找的数据 x:");
scanf("%d",&x);
int t=findx(pz,x); 查找值为x的数据
if(t!=0) printf("\n该元素所在位置为第 %d\n\n",t);
system("pause");
outlin(pz);
break;
}
case 6:exit(0); //退出程序
}
}while(cord<=5);
return 0;
}
void create(SqList *v){
int i;
printf("\n 请输入表长n=");
scanf("%d",&(v->length));
printf("\n 请输入表数据:\n");
for(i=0;i<v->length;i++){
printf("\n data%d=",i+1);
scanf("%d",&(v->elem[i]));
}
printf("\n表创建成功\n\n");
system("pause");
}
void outlin(SqList s){
system("cls");
int i;
printf("表信息:\n");
printf("位置 元素值 物理地址");
for(i=1;i<=s.length;i++)
printf("\n%2d %6d %13p",i,s.elem[i-1],&s.elem[i-1]);
printf("\n-------------------------");
}
void insert(SqList *v,int i,ElemType x){
int j;
if((i<0)||(i>v->length)){
// system("cls");
printf("\n Error!您输入的位置有误,请重新输入\n\n");
system("pause");
}else{
for(j=v->length;j>=i;j--)
v->elem[j]=v->elem[j-1];
v->elem[j]=x;
v->length++;
printf("\n数据插入成功!\n\n");
system("pause");
}
}
void deleter1(SqList *v,int i){
int j;
if((i<0)||(i>v->length)){
printf("\n No exit!\n");
system("pause");
}else{
for(j=i;j<v->length;j++)
v->elem[j-1]=v->elem[j];
v->length--;
printf("\n成功删除%d位置上的数据\n\n",i);
system("pause");
}
}
void deleter2(SqList *v,int x){
int temp=v->length;
for(int i=0;i<v->length;i++){
if(v->elem[i]==x){
for(int j=i;j<v->length-1;j++){
v->elem[j]=v->elem[j+1];
}
v->length--;
i--;
}
}
if(temp==v->length){
printf("\n删除失败!未找到数据%d\n\n",x);
}else{
printf("\n成功删除表中所有的数据%d\n\n",x);
}
system("pause");
}
int findx(SqList v,int x){
for(int i=0;i<v.length;i++){
if(v.elem[i]==x) return i+1;
}
printf("\n未在表中找到数据%d\n\n",x);
system("pause");
return 0;
}
二、运行结果
1.建立线性表
2.插入数据
3.删除某位置的元素
4.删除值为某的数据