线性表的顺序存储及基本操作的实现
线性表(List)是由n个元素构成的有序序列,用户处理线性表数据时常常需要初始化、查找、插入、删除、计算数据长度等操作。
数据Data利用数组存储,利用下标使得查找 等操作十分方便。Last始终存储最后一个元素的数组下标,可以用于判断数组长度。在初始化时,Last的值为-1。
typedef struct LNode*List;
struct LNode{
ElementType Data[MAXSIZE]; //利用数组的连续存储空间顺序存放线性表的各元素
int Last; //指向最后一个元素
};
struct LNode L;
List PtrL;
线性表的基本操作包括:
List MakeEmpty(); //初始化一个空线性表
ElementType KFind(int K,List L); //根据位序K,返回相应元素
int Find(ElementType X,List L); //在线性表L中查找X第一次出现的位置
void Insert(ElementType X,int i,List L); //在位序i前插入一个新元素X
void Delete(int i,List L); //删除指定位序i的元素
int Length(List L); //返回线性表L的长度
1.初始化:
List MakeEmpty()
{
List PtrL;
PtrL = (List)malloc(sizeof(struct LNode));
PtrL->Last = -1;
return PtrL;
}
创建一个空线性表并返回其指针。
2.查找
int Find(ElementType X,List PtrL)
{
int i = 0;
while(i <= PtrL->Last && PtrL->Data[i] != X)
i++;
if(i > PtrL->Last) //如果没找到,返回-1
return -1;
else
return i;
}
?3.插入
void Insert(ElementType X,int i,List PtrL)
{
int j;
if(PtrL->Last == MAXSIZE - 1) //表满,无法插入
{
printf("表满\n");
return ;
}
if(i < 1 || i > PtrL->Last+2) //检查插入位置合法性
{
printf("插入位置不合法\n");
return ;
}
for(j = PtrL->Last;j >= i-1;j--)
PtrL->Data[j+1] = PtrL->Data[j];
PtrL->Data[i-1] = X;
PtrL->Last++;
}
4.删除
void Delete(int i,List PtrL)
{
int j;
if(i < 1 || i > PtrL->Last + 1) //检查空表及删除位置的合法性
{
printf("不存在第%d个元素\n",i);
return ;
}
for(j = i;j < PtrL->Last;j++)
PtrL->Data[j-1] = PtrL->Data[j];
PtrL->Last--;
}
EOF
?