线性表的顺序存储实现

前言

线性表的顺序存储及基本操作的实现


一、数据对象集

线性表(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

 

你可能感兴趣的:(学习笔记,算法,数据结构)