顺序表就好像一栋楼房,有规定的层数MAXSIZE,elem[MAXSIZE]中住着一个房客,last始终指向最后一层。一个比喻说顺序表的插入和删除操作,就是房客的租房和退房。租房要考虑是否整栋楼都住满了人,租房的位置对与不对,最后是last有没有指向最后。就像插入的时候要注意表空间是不是满了,插入的位置的正确性,节点的移动。删除顺序表就像是房客退房,离开一个房客后,last要减一。此外,还要判断是否有该房客,就像顺序表要判断是否存在要要删除的元素。
代码如下:
#include "stdlib.h"
#include "stdio.h"
#define MIXSIZE 10
//定义一个线性表
typedef int elemtype;
typedef struct
{
elemtype elem[MIXSIZE];
int last;
}SeqList;
int InsertList(SeqList *Lp,int i,elemtype x)
{
int j;
if(Lp->last==MIXSIZE-1)//表是否是满的
{
printf("表满");
return(-1);
}
if(i<1||i>Lp->last+2)//位置的正确性
{
printf("位置错");
return (0);
}
for(j=Lp->last;j>=i-1;j--)//节点的向下移动
Lp->elem[j+1]=Lp->elem[j];
Lp->elem[i-1]=x;
Lp->last++;
return (1);
}
int DeleteList(SeqList *Lp,int i)
{
int j;
if(i<1||i>Lp->last+1)
{
printf("不存在第i个元素");//检查是否存在该元素
return(0);
}
for(j=i;j<=Lp->last;j++)//节点向上移动
Lp->elem[j-1]=Lp->elem[j];
Lp->last--;
return(1);
}
void main()
{
int i;
SeqList *Lp;
Lp=(SeqList *)malloc(sizeof(SeqList));
Lp->last=10;
printf("输入元素:");
scanf("%d",&i);
InsertList(Lp,5,7);
for(i = 0;i < MIXSIZE;i++) {
printf("%d\n",Lp->elem[i]);
}
printf("插入成功\n");
DeleteList(Lp,4);
for(i = 0;i < MIXSIZE;i++) {
printf("%d\n",Lp->elem[i]);
}
printf("删除成功\n");
}