#include<iostream>
using namespace std;
#define ERROR 0
#define OK 1
#define MAXSIZE 100
typedef int Status;
typedef int ElemType;
typedef struct{
ElemType *elem;
int length;
}SqList;
Status InitList(SqList &L)
{//构造一个空的顺序表L
L.elem=new ElemType[MAXSIZE];//分配一个大小为MAXSIZE的数组空间给顺序表
if(!L.elem) return ERROR;//存储分配失败退出
L.length=0;//空表长度为0
return OK;
}
void ClearList(SqList &L)
{
L.length=0;
}//清空该表
bool ListEmpty(SqList L){
if(L.length==0) return true;
else return false;
}//判断是否为空 是TRUE 否FALSE
int ListLength(SqList L){
return L.length;
}//返回表L的元素个数(求长度)
Status GetElem(SqList L,int i,ElemType &e){
if(i<1||i>L.length) return ERROR;
e=L.elem[i-1];
return OK;
} //把第i个元素赋给e
Status LocateElem(SqList L,ElemType e){
int i;
for(i=0;i<=L.length-1;i++)
if(L.elem[i]==e) return i+1;
return 0;
}// 返回L中第一个与e相同的位置,没有则返回0
Status ListInsert(SqList &L,int i,ElemType e){
if( (i<1)||(i>L.length+1) ) return ERROR;
if(L.length == MAXSIZE) 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
return OK;
}//在L中第i个位置插入元素e
Status ListDelete(SqList &L,int i){
if((i<1)||(i>L.length)) return ERROR;
for(int j=i;j<=L.length-1;j++) L.elem[j-1]=L.elem[j];//删除位置后面的元素前移
--L.length;//表的长度减1;
return OK;
}//删除L中第i个位置的元素
SqList L;
int main(void){
int i,j;
InitList(L);
cout<< "顺序表基本操作;\n"
<< "操作1:创建顺序表,赋值\n"
<< "操作2:插入元素\n"
<< "操作3:删除元素\n"
<< "操作4:查询元素\n"
<< "操作5:求表长\n"
<< "操作6:清空该表\n"
<< "操作7:判断表是否为空\n"
<< "操作8:退出\n";
while(true){
int n,t,x,tt;
ElemType sertnum1;
int sertnum2,ii;
ElemType ss;
cout<< "输入操作序号;";
cin>>n;
switch(n){
case 1:
t=InitList(L);
if(t){
cout<<"创建成功,请输入需要赋值的个数:";
cin>>x;
cout<<"请输入"<<x<<"个数字:" ;
for(i=1;i<=x;i++){
cin>>tt;
ListInsert(L,i,tt);
}
}
else cout<<"表已存在"<<endl;
break;
case 2:
cout<<"请输入要插入的元素以及其位置:";
cin>>sertnum1>>sertnum2;
t=ListInsert(L,sertnum2,sertnum1);
if(!t) cout<<"插入失败"<<endl;
break;
case 3:
cout<<"请输入需要删除元素的位置:";
cin>>ii;
t=ListDelete(L,ii);
if(!t) cout<<"删除失败"<<endl;
break;
case 4:
cout<<"请输入需要查询的元素:" ;
cin>>ss;
t=LocateElem(L,ss);
if(t) cout<<t;
else cout<<"查无此元素"<<end;
break;
case 5:
t=ListLength(L);
cout<<"表长为:"<<t<<endl;
break;
case 6:
ClearList(L);
cout<<"表已清空"<<endl;
break;
case 7:
t=ListEmpty(L);
if(t) cout<<"表为空"<<endl;
else cout<<"表非空"<<endl;
break;
case 8:
exit(0);
default:
cout<<"数字非法,请重新输入"<<endl;
}
cout<<"目前表内元素依次为:"<<endl;
for(i=1;i<=L.length;i++){
ElemType e;
GetElem(L,i,e);
cout<<e<<" ";
}
cout<<endl;
}
return 0;
}
参考书籍《数据结构》严蔚敏