#include<iostream>
using namespace std;
#define Maxsize 10
typedef int ElemType;
typedef struct //顺序表的静态存储结构
{
ElemType data[Maxsize];
int length ;
}SqList;
void PrintTitle()
{
cout<<"**********顺序表的功能选择********************\n"<<endl;
cout<<"1.创建(显示)\t2.插入\t3.删除\t4.退出\t5.逆序\n"<<endl;
cout<<"**********************************************"<<endl;
cout<<"输入你的选择: "<<endl;
}
void Print(SqList *L)
{
if(L->length == 0)
cout<<"顺序表为空!"<<endl;
else
{
for(int j = 0;j < L->length;++j)
cout<<L->data[j]<<" ";
cout<<endl;
}
}
int CreateList(SqList *L) //创建顺序表
{
int n ,i=0;
L->length = 0; //初始化顺序表的其实地址和元素个数
cout<<"Please input SqList number:(Ctrl+Z to end)"<<endl; //输入元素
while(cin>>n)
{
if(L->length >= Maxsize)
{
cout<<"元素个数已达最大值!";
break;
}
else{
L->data[i] = n;
++i;
++L->length ;
}
}
cout<<"已创建的顺序表为:"<<endl;//输出创建的顺序表
Print(L);
PrintTitle();
return 0;
}
int ListInsert(SqList *L,int i,ElemType e) //插入函数
{
int k;
if(L->length >= Maxsize||i < 1||i > L->length+1)//插入位置越界
{
cout<<"插入位置越界!\n请重新输入你的选择:"<<endl;
return 0;
}
for(k = L->length;k >= i-1;--k) //插入位置后的数依次后移
L->data[k+1] = L->data[k];
L->data[i-1] = e;
L->length++;
cout<<"插入后的顺序表为:"<<endl;//输出插入后的顺序表
Print(L);
PrintTitle();
return 0;
}
int Delelement(SqList *L,int i) //删除元素
{
int k;
if(L->length == 0||i < 1||i > L->length) //删除位置越界
{
cout<<"删除位置越界!\n请重新输入你的选择:"<<endl;
return 0;
}
for(k = i;k <L->length ;++k) //删除位置后的数前移
L->data[k-1] = L->data[k];
L->length--;
cout<<"删除后的顺序表为:"<<endl;//输出删除后的顺序表
Print(L);
PrintTitle();
return 0;
}
int Inverted(SqList *L)
{
int i,j;
if(L->length == 0)
cout<<"顺序表为空!"<<endl;
else {
for(i = 0,j = L->length -1;i < j;++i,--j){
ElemType temp;
temp = L->data[i];
L->data[i] = L->data[j];
L->data[j] = temp;
}
cout<<"逆序后的顺序表为:"<<endl;
Print(L);
}
PrintTitle();
return 0;
}
int main()
{
PrintTitle();
SqList L;
L.length = 0;
int choice;
while(cin>>choice)
{
if(choice == 4)
return 0;
switch(choice)
{
case 1:
CreateList(&L);cin.clear();break;
case 2:
{
int i;
int e;
cout<<"输入插入的位置以及插入的元素"<<endl;
cin>>i>>e;
ListInsert(&L,i,e);
break;
}
case 3:
{
int j;
cout<<"输入删除的位置"<<endl;
cin>>j;
Delelement(&L,j);
break;
}
case 5:
Inverted(&L);break;
default:
cout<<"make sure your choie between 1 to 4!"<<endl;
break;
}
}
getchar();
return 0;
}