//线性表的顺序存储
#include<stdio.h>
#include<stdlib.h>
struct lnode
{
int a[105];
int last;
};
typedef struct lnode* list;//list是指向结构体的指针
//初始化
list MakeEmpty()
{
list l;
l=(list)malloc(sizeof(struct lnode));
l->last=-1;//该线性表为空;
printf("请输入数据总数");
scanf("%d",&l->last);
int i;
for(i=0;i<=l->last-1;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&l->a[i]);
printf("\n");
}
return l;
}
//查找
int search(int x,list l)
{
int i=0;
while(i<=l->last-1)
{
if(l->a[i]==x) return i+1;
i++;
}
return -1;
}
//插入
//在第p位插入x
list insert(list l,int p,int x)
{
if(l->last+2<p||p<1) printf("插入失败\n");
else
{
int i;
l->last++;
//相当于插在p-1位
for(i=l->last-1;i>=p;i--)
{
l->a[i]=l->a[i-1];
}
l->a[p-1]=x;
}
return l;
}
//删除
list delet(list l,int p)
{
if(p>l->last-1) printf("删除失败\n");
else
{
int i;
//相当于删除p-1位
for(i=p-1;i<=l->last-2;i++)
{
l->a[i]=l->a[i+1];
}
l->last--;
}
return l;
}
//输出
void print(list l)
{
int i=l->last;
for(i=0;i<=l->last-1;i++)
{
printf("第%d位是%d\n",i+1,l->a[i]);
}
}
int main()
{
list na;int t1,t2,tt2,t3;
int ans1;
na=MakeEmpty();
printf("您想要查找哪一个数字?");
scanf("%d",&t1);
ans1=search(t1,na);
if(ans1==-1) printf("%d不存在\n",t1);
else printf("%d是第%d位数\n",t1,ans1);
printf("您想要在第几位插入数字?");
scanf("%d",&t2);
printf("您想要插入哪一个数字?");
scanf("%d",&tt2);
na=insert(na,t2,tt2);
print(na);
printf("您想删除哪一位数字?");
scanf("%d",&t3);
na=delet(na,t3);
print(na);
return 0;
}