包含了一些简单的功能,初学者,希望大佬们给点建议。
#include <stdio.h>
#include <stdlib.h>
#define error -1
#define ok 1
//声明顺序表的结构体类型
typedef struct{
int *date;
int length;
int size;
}Sqlist;
//判断表的情况
int pd1(Sqlist L){
if(L.size==0){
printf("!!!空表!!!\n");
system("pause");
return error;
}
return ok;
}
//创建顺序表
int create(Sqlist *L,int size){
if(L->date==NULL){
L->date=(int *)malloc(sizeof(int)*size);
L->length=0;
return ok;
}
else
return error;
}
//在表尾追加元素
int addend(Sqlist *L,int date){
int i=L->length;
L->date[i]=date;
L->length++;
printf("操作成功\n");
return ok;
}
//删除某位置的元素
int delete1(Sqlist *L,int n){
if(n==L->length)
L->length--;
else{
for(int i=n;i<L->length;i++)
L->date[i-1]=L->date[i];
L->length--;
}
printf("操作成功\n");
return ok;
}
//显示长度与元素
int display(Sqlist L){
printf("表长为:%d\n",L.length);
printf("各元素为:");
for(int i=0;i<L.length;i++)
printf("%d ",L.date[i]);
printf("\n");
return ok;
}
//插入元素
int insert(Sqlist *L,int n,int m){
for(int i=L->length-1;i>=n-1;i--)
L->date[i+1]=L->date[i];
L->date[n-1]=m;
L->length++;
printf("操作成功\n");
return ok;
}
//查找元素
int lookup(Sqlist L,int value){
printf("元素为:%d\n",L.date[value-1]);
return ok;
}
//修改元素
int modify(Sqlist *L,int n,int m){
L->date[n-1]=m;
printf("操作成功\n");
return ok;
}
//定位元素
int location(Sqlist L,int date){
for(int i=0;i<L.length;i++)
if(L.date[i]==date){
printf("位置为:%d\n",i+1);
return ok;
}
printf("无此元素\n");
return ok;
}
//清除表
int clear(Sqlist *L){
L->length=0;
L->size=0;
free(L->date);
L->date=NULL;
printf("清除成功\n");
return ok;
}
int main(){
int op,jd,value,value1;
Sqlist L;
do{
system("cls");
printf("请选择操作;\n1.创建\n2.追加\n3.删除\n4.显示\n5.插入\n6.查找\n7.修改\n8.定位\n9.清除\n0.退出\n请选择;");
scanf("%d",&op);
switch(op){
case 1:
printf("请输入表的长度;");
scanf("%d",&L.size);
if(L.size<1){
printf("!!!输入非法!!!");
system("pause");
break;
}
else{
jd=create(&L,L.size);
if(jd==ok)
printf("创建成功\n");
else
printf("!!!已有表,创建失败!!!\n");
system("pause");
break;
}
case 2:
if(pd1(L)==error)
break;
else if(L.length==L.size){
printf("!!!表满!!!\n");
system("pause");
break;
}
else{
printf("请输入元素;");
scanf("%d",&value1);
jd=addend(&L,value1);
system("pause");
break;
}
case 3:
if(pd1(L)==error)
break;
else{
printf("请输入位置:");
scanf("%d",&value);
if(value<1||value>L.length){
printf("!!!输入非法!!!");
system("pause");
break;
}
else{
jd=delete1(&L,value);
system("pause");
break;
}
}
case 4:
if(pd1(L)==error)
break;
else{
jd=display(L);
system("pause");
break;
}
case 5:
if(pd1(L)==error)
break;
else if(L.length==L.size){
printf("!!!表满!!!\n");
system("pause");
break;
}
else{
printf("请输入位置:");
scanf("%d",&value);
if(value<1||value>L.length){
printf("!!!输入非法!!!");
system("pause");
break;
}
else{
printf("请输入元素:");
scanf("%d",&value1);
jd=insert(&L,value,value1);
system("pause");
break;
}
}
case 6:
if(pd1(L)==error)
break;
else{
printf("请输入位置:");
scanf("%d",&value);
if(value<1||value>L.length){
printf("!!!输入非法!!!");
system("pause");
break;
}
else{
jd=lookup(L,value);
system("pause");
break;
}
}
case 7:
if(pd1(L)==error)
break;
else{
printf("请输入位置:");
scanf("%d",&value);
if(value<1||value>L.length){
printf("!!!输入非法!!!");
system("pause");
break;
}
else{
printf("请输入元素:");
scanf("%d",&value1);
jd=modify(&L,value,value1);
system("pause");
break;
}
}
case 8:
if(pd1(L)==error)
break;
else{
printf("请输入元素:");
scanf("%d",&value1);
jd=location(L,value1);
system("pause");
break;
}
case 9:
if(pd1(L)==error)
break;
else{
jd=clear(&L);
system("pause");
break;
}
case 0:
printf("按下任意键退出系统");
break;
default:
printf("输入错误\n");
system("pause");
}
}while(op);
}