线性表的链式存储实现

#include <stddef.h>
#define ElementType int     //自定义元素类型

//定义链表存储实现的线性表的结构体
typedef struct LNode* List;
struct LNode
{
	ElementType Data;
	List Next;
};
struct LNode Lnode;
List PtrL;

//求表长
int Length(List PtrL)
{
	List p = PtrL;
	int cnt = 0;
	while (p)     //节点不空就循环
	{
		p = p->Next;
		cnt++;
	}
	return cnt;
}

//查找(按序号)
List FindKth(List PtrL, int k)
{
	List p = PtrL;
	int i = 1;
	while (p != NULL && i < k)
	{
		p = p->Next;
		i++;
	}
	if (i == k)
		return p;
	else
		return NULL;
}

//查找(按值查找)
List FindX(List PtrL, ElementType X)
{
	List p = PtrL;
	while (p && p->Data != X)
	{
		p = p->Next;
	}
	return p;
}

//插入(在第 i - 1 个节点后插入)
List Insert(List PtrL, ElementType X, int i)
{
	List p, s;
	if (i == 1)
	{
		s = (List)malloc(sizeof(struct LNode));
		s->Data = X;
		s->Next = PtrL;
		return s;
	}
	p = FindKth(PtrL, i - 1);
	if (p == NULL)
	{
		printf("Error Augment");
		return NULL;
	}
	else
	{
		s = (List)malloc(sizeof(struct LNode));
		s->Data = X;
		s -> Next = p->Next;
		p->Next = s;
		return PtrL;
	}
}

//删除
List Delete(List PtrL, int i)
{
	List p, tmp;
	if (i == 1)
	{
		tmp = PtrL;
		if (PtrL != NULL)
			PtrL = PtrL->Next;
		else
			return NULL;
		free(tmp);
		return PtrL;
	}
	p = FindKth(PtrL, i - 1);
	if (p == NULL)
	{
		printf("The (i-1)th node is not existed!");
		return NULL;
	}
	else if (p->Next == NULL)
	{
		printf("The ith node is not existed!");
		return NULL;
	}
	else
	{
		tmp = p->Next;
		p->Next = tmp->Next;
		free(tmp);
		return PtrL;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值