#include <iostream>
using namespace std;
typedef int ElemType;
#define Maxsize 100
//顺序表的两个要素:data和length
typedef struct
{
ElemType data[Maxsize];
int length;
}SqList;
//1.创建线性表
void CreateList(SqList *&L,ElemType a[], int n)//注意引用的使用
{
if(n>Maxsize)
throw"上溢";
else
{
for(int i=0;i<=n-1;i++)
{
cin>>a[i];
L->data[i]=a[i];
}
L->length=n;
}
}
//2.初始化线性表
void InitList(SqList *&L)
{
L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
L->length=0;
}
//3.销毁线性表
void Destory(SqList *&L)
{
free(L);
}
//4.判断表是否为空,空返回1,否则返回0
int ListEmpty(SqList *&L)
{
return(L->length==0);
}
//5.判断表是否满
int ListFull(SqList *&L)
{
if(L->length==Maxsize)
return 1;
else
return 0;
}
//6.将e插入表中位置i
void Insert(SqList *&L,int i,ElemType e)
{
if(L->length>=Maxsize)
throw"上溢";
if(i<1||i>L->length+1)
throw"插入位置非法";
else
{
for(int j=L->length-1;j>=i-1;j--)
{
L->data[j+1]=L->data[j];
}
L->data[i-1]=e;
L->length++;
}
}
//7.删除表中位置i的元素
ElemType Delete(SqList *L,int i)
{
if(L->length==0)
throw"下溢";
if(i<1||i>L->length)
throw"删除位置非法";
else
{
ElemType x=L->data[i-1];
for(int j=i-1;j<=L->length-1;j++)
{
L->data[j]=L->data[j+1];
}
L->length--;
return x;
}
}
//8.获取位置i的元素
ElemType GetElem(SqList *&L,int i)
{
if(i<1||i>L->length)
throw"获取元素位置异常";
else
{
ElemType x=L->data[i-1];
return x;
}
}
//9.查找第一个与e相等的元素位置
int LocateElem(SqList *&L,ElemType e)
{
for(int i=0;i<=L->length-1;i++)
{
if(L->data[i]==e)
return i+1;
}
return 0;
}
//10.求表长
int ListLength(SqList *&L)
{
return L->length;
}
//11.输出表全部元素
void DispList(SqList *&L)
{
if(L->length)
{
for(int i=0;i<=L->length-1;i++)
cout<<i+1<<":"<<L->data[i]<<endl;
}
}
void main()
{
SqList *L;
//L=(SqList *)malloc(sizeof(SqList));
InitList(L);//初始化
ElemType a[100];
ElemType e;
int n,i;
cin>>n;
CreateList(L,a,n);
ListEmpty(L);
ListFull(L);
cout<<"请输入插入位置:";
cin>>i;
cout<<endl;
cout<<"请输入要插入位置"<<i<<"的元素值:";
cin>>e;
Insert(L,i,e);
DispList(L);
Delete(L,i);
DispList(L);
e=GetElem(L,i);
i=LocateElem(L,e);
cout<<i<<endl;
ListLength(L);
DispList(L);
Destory(L);
system("pause");
}