#include<iostream>
#define ok 1
#define error 0
#define overflow -1
#define MAXSIZE 100
typedef int ElemType;
typedef int Status;
//定义顺序表的存储结构
using namespace std;
typedef struct
{
ElemType* elem;
int length;
}SqList;
//构造空的顺序表L
Status InitList(SqList& L)
{
L.elem = new ElemType[MAXSIZE];
if (!L.elem)exit(overflow);
L.length = 0;
return ok;
}
//顺序表赋值(作用域)
Status SetList(SqList& L)
{
int i, N;
cout << "输入顺序表长度:" << endl;
cin >> N;
cout << "输入各个元素:" << endl;
for (i = 0;i < N;i++)
{//cin>>ElemType[i]>>" ">>;
cin >> L.elem[i];
L.length++;
}
return 0;
}
//遍历顺序表L
Status TraverList(SqList& L)
{
int i;
cout << "该顺序表为" << endl;
for (i = 0;i < L.length;i++)//i<N
{
cout << L.elem[i] << endl;
}
return 0;
}
//取顺序表L的第i个元素的值,用e返回
Status GetElem(SqList L, int i, ElemType& e)//ElemType(*) e ElemType &e
{
if (i > L.length || i < 1)
return error;
e = L.elem[i - 1];
return 0;
}
//查找(给定的值e在顺序表中的位序)
Status LocateElem(SqList L, ElemType e)
{
int i;
for (i = 0;i < L.length;i++)
{
if (e == L.elem[i])
return i + 1;
}
return 0;
}
//插入(在顺表第i个位置插入新元素e)
Status ListInsert(SqList& L, int i, ElemType e)
{
int j;
if (i<1 || i>L.length + 1) return error;
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;
++L.length;
}
//删除(删除第i个元素)
Status ListDelete(SqList& L, int i)
{
int j;
if (i<1 || i>L.length)return error;
for (j = i;j <= L.length - 1;j++)
L.elem[j - 1] = L.elem[j];
--L.length;
return ok;
}
int main()
{
SqList L;
int i, j, f;
ElemType e;
//初始化列表
if (InitList(L))
cout << "初始化成功" << endl;
//为顺序表赋值
SetList(L);//cout<<L.length<<endl;
//遍历顺序表
TraverList(L);
//取值
cout << "请输入输入所取元素的位序" << endl;
cin >> i;
GetElem(L, i, e);
cout << "第" << i << "个元素为" << e << endl;
//查找(给定的值e在顺序表中的位序)
cout << "请输入要查找的数" << endl;
cin >> e;
cout << LocateElem(L, e) << endl;
//插入(在顺表第i个位置插入新元素e)
cout << "请输入要插入数的位序和元素" << endl;
cin >> i >> e;
ListInsert(L, i, e);
TraverList(L);
//删除(删除第i个元素)
cout << "请输入删除第几个元素" << endl;
cin >> i;
ListDelete(L, i);
TraverList(L);
return 0;
}