#include<stdio.h>
#define ERROR 0
#define OK 1
typedef int Status;
typedef int ElemType;
//---------顺序表的存储结构 ------------
#define MAXSIZE 100 //顺序表可能达到的最大长度
typedef struct
{
ElemType *elem; //存储空间的基地址
int length ; //当前长度
} SqList ; //顺序表的结构类型为 SqList
//1.---------顺序表的初始化 --------
Status InitList(SqList &L )
{//构造一个空的顺序表L
L.elem = new ElemType[MAXSIZE]; //为顺序表分配一个大小为 MAXSIZE的数组空间
if(!L.elem)
return ERROR; //存储分配失败退出
L.length =0 ; //空表长度为 0
return OK;
}
//2.---------顺序表的插入 --------
Status ListInsert(SqList &L,int i,ElemType e)
{//在顺序表L中第i个位置插入新的元素e,i值合法的范围是1<=i<=L.length+1
if((i<1)||(i>L.length+1))
{printf("溢出了!"); //i值不合法
return ERROR;}
if(L.length==MAXSIZE){//当前存储空间已满
printf("满啦!");
return ERROR;}
for(int 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
}
//3.---------顺序表的取值 --------
Status GetElem(SqList L,int i,ElemType &e)
{
if (i<1||i>L.length)
return ERROR; //判断i值是否合理,若不合理,返回ERROR
e= L.elem[i-1]; //elem[i-1]单元存储第i个数据元素
return OK;
}
//4.---------顺序表的查找 --------
int LocateElem(SqList L,ElemType e)
{//在顺序表L中查找值为e的数据元素,返回其序号
for(int i=0;i<L.length;i++)
if(L.elem[i]==e)
return i+1; //查找成功,返回序号i+1
return 0; //查找失败,返回0
}
//5.---------顺序表的删除--------
Status ListDelete(SqList &L,int i)
{//在顺序表L中删除第i个元素,i值的合法范围是1<=i<=L.length
if((i<1)||(i>L.length))
return ERROR; //i值不合法
for(int j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j]; //被删除元素之后的元素前移
--L.length; //表长-1
return OK;
}
//6.-----------顺序表的输出-----------
void print(SqList &L) {
for(int i =0;i<L.length;i++){
printf("%d ",L.elem[i]);
}
printf("\n");
}
int main()
{
SqList La;
int i=2,n=0,m,x;
int e=0;
int b = InitList(La); //初始化La
if(b==1)
printf("初始化成功!\n");
else
printf("初始化失败!\n");
printf("请输入元素个数=? "); //插入元素
scanf("%d",&n);
for(i=1;i<=n;i++)
{ printf("i=%d\n",i);
scanf("%d",&e);
m=ListInsert(La,i,e);
if(m==0)printf("插入失败!\n");
}
printf("输出当前顺序表:");
print(La); //输出当前顺序表
printf("输入要插入的位置:");
scanf("%d",&i);
printf("输入插入的数字:"); //插入元素
scanf("%d",&e);
m=ListInsert(La,i,e);
if(m==0)printf("插入失败!\n");
printf("输出当前顺序表:");
print(La);
printf("你要取的位置?") ;
scanf("%d",&i);
GetElem(La,i,e) ; //取值
printf("取值为:%d\n",e);
printf("你要取的值?") ;
scanf("%d",&i);
x=LocateElem(La,i); //找位置
printf("位置为:%d\n",x);
printf("你要删除的位置是?");
scanf("%d",&i);
b=ListDelete(La,i);
if(b==1)
printf("删除成功!\n");
else
printf("删除失败!\n");
printf("输出当前顺序表:");
print(La); //输出当前顺序表
}