前言
线性表的顺序存储及基本操作的实现
一、数据对象集
线性表(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) //如果没找到,返回-1return -1;elsereturn 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