//库函数的引用
#include <stdio.h>
#include <stdlib.h>
//符号常量的定义
#define MAXSIZE 100 //预估顺序表容量
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//数据类型的重命名、定义
typedef int Status;
typedef int ElemType;
typedef struct{
ElemType *elem;
int length;
}SqList;
//自定义函数的声明
Status InitList(SqList &L);
Status ListInsert(SqList &L,int i ,ElemType e);
Status ListDelete(SqList &L,int i);
Status GetElem(SqList L, int i, ElemType &e);
//主函数
int main(int argc, char *argv[]) {
SqList L;
int choice,z = 1;
int i;
ElemType e;
if(!InitList( L ))
{
exit(0);
}
//输出菜单
while(z)
{
printf("-------线性表数据存储结构---\n");
printf("|\t\t1.插入\t\t|\n");
printf("|\t\t2.删除\t\t|\n");
printf("|\t\t3.查找\t\t|\n");
printf("|\t\t0.退出\t\t|\n");
printf("请输入你要选择的程序\n");
scanf("%d",&choice);
switch(choice){
case 1://插入
//给已知L(已知)、i、e
printf("请输入插入位置:");
scanf("%d",&i);
printf("请输入插入元素:");
scanf("%d",&e);
//调用
if(OK == ListInsert(L , i , e))
{
printf("插入成功!\n\n");
}
else
{
printf("插入失败!\n\n");
}
break;
case 2://删除
printf("输入您想删除的位置\n");
scanf("%d",&i);
if(OK == ListDelete(L,i))
{
printf("删除成功\n\n");
}
else
{
printf("删除失败\n\n");
}
break;
case 3://查找
printf("输入您想查找的元素序号\n");
scanf("%d",&i);
//调用
if(OK == GetElem(L , i , e))
{
printf("您查找的元素是: \n");
}
else
{
printf("您输入的序号有误\n");
}
break;
case 0:z = 0;
printf("欢迎下次再来!");
break;
default:printf("输入错误!\n");
}
}
return 0;
}
//——————自定义函数(来自《数据结构》)
//初始化
Status InitList(SqList &L){ //构造一个空的顺序表
L.elem = new ElemType[MAXSIZE]; //为顺序表分配 空间
if(!L.elem) exit(OVERFLOW); //存储分配失败
L.length = 0; //空表长 度为0
return OK;
}
//插入算法
Status ListInsert(SqList &L,int i ,ElemType e){
int j;
if(i<1 || i>L.length+1) return ERROR; //i值不合法
if(L.length==MAXSIZE) return ERROR; //当前存储空间已满
for(j=L.length-1;j >= i-1;j--) L.elem[j+1]=L.elem[j]; //插入位置及之后的元素后移
L.elem[i-1]=e; //将新元素e放入第i个位置
L.length ++; //表长增1
return OK;
}
//删除算法
Status ListDelete(SqList &L,int i)
{
int j;
if((i<1)||(i>L.length))
return ERROR; //i值不合法
for (j=i ; j<=L.length-1 ; j++)
L.elem[j-1]=L.elem[j];//被删除元素之后的元素前移
--L.length; //表长减1
return OK;
}
//查找算法
Status GetElem(SqList L, int i, ElemType &e){
if (i < 1 || i > L.length)
return ERROR;
e = L.elem[i-1];
return OK;
}