#include <stdio.h>
#define MAXSIZE 100
typedef struct
{
int elem[MAXSIZE];
int last;
} SeqList;
void PrinList(SeqList L)
{ int i;
for(i=0;i<=L.last;i++)
printf("\n顺序表L元素%d为%d ",i+1,L.elem[i]);
}
int Locate(SeqList L, int e)
{
int i=0; /*i为扫描计数器,初值为0,即从第一个元素开始比较*/
while ((i<=L.last)&&(L.elem[i]!=e))/*顺序扫描表,直到找到值为key的元素, 或扫描到表尾而没找到*/
i++;
if (i<=L.last)
return(i+1); /*若找到值为e的元素,则返回其序号*/
else
return(-1); /*若没找到,则返回空序号*/
}
int InsList(SeqList *L,int i,int e)
{
int k;
if((i<1) || (i>L->last+2)) /*首先判断插入位置是否合法*/
{
printf("插入位置i值不合法");
return(-1);
}
if(L->last>= MAXSIZE-1)
{
printf("表已满无法插入");
return(-1);
}
for(k=L->last;k>=i-1;k--) /*为插入元素而移动位置*/
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e; /*在C语言数组中,第i个元素的下标为i-1*/
L->last++;
return(1);
}
void prinList(SeqList L)
{ int i;
for(i=0;i<=L.last;i++)
printf("\n顺序表L元素%d为%d ",i+1,L.elem[i]);
}
int DelList(SeqList *L,int i)
/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1 */
{
int k;
if((i<1)||(i>L->last+1))
{
printf("删除位置不合法!");
return(-1);
}
for(k=i; i<=L->last; k++)
L->elem[k-1] = L->elem[k]; /*将后面的元素依次前移*/
L->last--;
return(1);
}
void prinlist(SeqList L)
{ int i;
for(i=0;i<=L.last;i++)
printf("\n顺序表L元素%d为%d ",i+1,L.elem[i]);
}
int main()
{ int i;
SeqList L;
int pos;
scanf("%d ",&L.last);
for(i=0;i<=L.last;i++)
scanf("%d",&L.elem[i]);
PrinList(L);
printf("\n顺序表的长度为%d",L.last +1);
printf("\n顺序表的第%d个元素为%d",i=3,L.elem[2]);
pos=Locate(L,12);
printf("\n12的位置为%d",pos);
InsList(&L,4,999);
prinList(L);
DelList(&L,3);
prinlist(L);
return 0;
}