数据结构学习笔记-03-线性表及其实现

线性表的顺序存储实现

typedef struct LNode *list;
struct LNode
{
	ElementType Data[MAXSIZE];
	int Last;
};

struct LNode L;
List Ptrl;

初始化:

List MakeEmpty()
{
	List PtrL;
	PtrL = (List )malloc(sizeof(struct LNode));
	PtrL->Last = -1;
	return PtrL;
}

查找指定元素:

int Find(ElementType X,List PtrL)
{
	int i = 0;
	while(i<=PtrL->Last && PtrL->Data[i]!=X)
		i++;
	if (i>PtrL->Last)
		return -1;
	else return i;
}

插入:

void insert(ElementType X,int i,List PtrL)
{
	int i;
	if(PtrL->Last == MAXSIZE-1)
	{
		printf("表满");
		return;
	}
	if (i<1||i>PtrL->Last+2)
	{
		printf("位置不合法");
		return;
	}
	for (j=PtrL->Last;j>=i-1;j--)
		PtrL->Data[j+1]=PtrL->Data[j];
	PtrL->Data[i-1]=X;
	PtrL->Last++;
	return;
}

删除节点:

void Delete(int i,List PtrL)
{
	int j;
	if (i<1||i>PtrL->Last+1)
	{
		printf("不存在第%d个元素",i);
		return;
	}
	for (j=i;j<=PtrL->Last;j++)
		PtrL->Data[j-1] = PtrL->Data[j];
	PtrL->Last--;
	return;
}

线性表的链式存储实现

typedef struct LNode *List;
struct LNode
{
	ElementType Data;
	List Next;
};
struct LNode L;
List PtrL;

求表长:

int Length(List PtrL)
{
	List p = PtrL;
	int j = 0;
	while(p)
	{
		p=p->Next;
		j++;
	}
	return j;
}

按序号查找:

List FindKth(int K,List PtrL)
{
	List p = PtrL;
	int i = 1;
	while(p!=NULL&&i<K)
	{
		p = p->Next;
		i++;
	}
	if (i==K)
		return p;
	else return NULL;
}

按元素值查找:

List Find(ElementType X,List PtrL)
{
	List p=PtrL; 
	while(p!=NULL && p->Data!=X)
		p=p->Next; 
	return p;
}

插入节点:

List Insert(List PtrL,int k,ElementType X)//插入元素
{
	List p,s;
	if (k==1)
	{
		s=(List)malloc(sizeof(struct LNode));
		s->Data=X;
		s->Next=PtrL;
		return s;
	}
	p=FindKth(k,PtrL)
	if (p==NULL)
	{
		printf("参数k出错");
		return NULL;
	}
	else 
	{
		s=(List)malloc(sizeof(struct LNode));
		s->Data=X;
		s->Next=p->Next;
		p->Next=s;
		return PtrL;
	}
}

删除节点:

List Delete(int k,LIst PtrL)//删除节点
{
	List p,s;
	if (k==1)
	{
		s=PtrL;
		if (PtrL!=NULL)
			PtrL=PtrL->next;
		else 
			return NULL;
		free(s);
		return PtrL;
	}
	p=FindKth(k-1,List)
	if (p==NULL)
	{
		printf("第%d个节点不存在",k-1);
		return NULL;
	}
	if (p->Next==NULL)
	{
		printf("第%d个节点不存在",k);
		return NULL;
	}
	else
	{
		s=p->Next;
		p-Next=s->Next;
		free(s);
		return PtrL;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39030646/article/details/85129063