#include <bits/stdc++.h>
#define maxn 100005
typedef int ElemType;
using namespace std;
struct SqList
{
ElemType *elem;
int length;
};
int InitList(SqList &L)//初始化一个空表
{
L.elem = new ElemType[maxn];//建立一个空表
if(!L.elem)exit(-2);//内存不足退出
L.length = 0;//空表的长度
return 1;
}
int GetElem(SqList L,int i,ElemType &e)//取值
{
if(i < 1 || i > L.length)return 0;
e = L.elem[i-1];
return 1;
}
int LocateElem(SqList L,ElemType e)//查找某个值逻辑位置
{
for(int i = 0; i < L.length; i ++)
{
if(L.elem[i] == e)return i + 1;
}
return 0;
}
int ListInsert(SqList &L,int i,ElemType e)//插入一个元素
{
if((i < 1) || (i > L.length))
{
return 0;
}
if(L.length == maxn)
{
return 0;
}
for(int j = L.length - 1; j >= i - 1; j --)
{
L.elem[j+1] = L.elem[j];
}
L.elem[i-1] = e;
L.length++;
return 1;
}
int ListDelete(SqList &L,int i)//删除逻辑位置的数值
{
if((i < 1) || (i > L.length))
{
return 0;
}
for(int j = i; j < L.length; j ++)
{
L.elem[j-1] = L.elem[j];
}
L.length--;
return 1;
}
int Listcreate(SqList &L,int len)//创建一个顺序表
{
for(int i = 0; i < len; i ++)
{
L.elem[i] = i + 1;
}
L.length = len;
return 1;
}
int Listprint(SqList &L)//输出顺序表
{
for(int i = 0; i < L.length; i ++)
{
cout << "实际位置" << i << ' ' << "逻辑位置"
<< i + 1 << ' ' << "数值" << L.elem[i] << endl;
}
return 1;
}
int main()
{
int flag = 1;
int len = 0;
int i = 0;
ElemType e;
SqList L;
while(flag)
{
cout << endl;
cout << "菜单如下" << endl;
cout << "0创建顺序表" << endl;
cout << "1顺序表取值" << endl;
cout << "2顺序表查找" << endl;
cout << "3顺序表插入" << endl;
cout << "4顺序表删除" << endl;
cout << "5输出顺序表" << endl;
cout << "6退出顺序表系统" << endl;
int op;
cin >> op;
switch(op)
{
case 0:
cout << "请输入你想创建的长度" << endl;
cin >> len;
Listcreate(L,len);
break;
case 1:
cout << "请输入你想查找的逻辑位置" << endl;
cin >> i;
GetElem(L,i,e);
cout << "实际位置 " << i - 1 << ' ' << "逻辑位置 "
<< i << ' ' << "数值 " << e << endl;
break;
case 2:
cout << "请输入查找的那个值的逻辑位置" << endl;
cin >> e;
cout << LocateElem(L,e) << endl;
break;
case 3:
cout << "请输入想插入的元素及逻辑位置" << endl;
cin >> e;
cin >> i;
ListInsert(L,i,e);
break;
case 4:
cout << "请输入想删除的元素的逻辑位置" << endl;
cin >> i;
ListDelete(L,i);
break;
case 5:
Listprint(L);
break;
case 6:
flag = 0;
break;
}
}
return 0;
}