再回首,数据结构——链表上的常见操作

本文回顾了数据结构的学习过程,分享了链式存储结构、单链表的查找、插入和删除操作,以及双向链表的插入方法。通过实例代码深入理解数据结构的基本概念和实现细节。

最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。

 


希望这些能提供给初学者一些参考。


//线性表的链式存储结构

typedef struct Lnode
{
	ElemType data;
	struct Lnode *next;
}ListNode;
typedef ListNode *LinkList;

//单链表的查找运算
LinkList Locate (LinkList head, ElemType x)
{
	LinkList p = head->next; 		//如果head带有头结点
	while (p != NULL && x != p->date)
		p = p->next;
	return p
}

//单链表的插入操作
void InsertList (LinkList head, int i, ElemType x)
{
	LinkList pre = head;
	int k = 0;
	
	while (pre != NULL && k++ < i - 1)
		pre = pre->next;
	if (k != i - 1 || NULL == pre)
		cout << ("Error!");
	else
	{
		p = (LinkList)molloc(sizeof(LinkList));
		p->date = x;
		p->next = pre->next;
		pre->next = p;
	}
}

//单链表的删除操作
void DelList (LinkList head, int i)
{
	LinkList pre = head;
	int k = 0;
	
	while (pre->next != NULL && k++ < i)
		pre = pre->next;
	if (!(pre->next) && k <= i)					
		cout << ("Error!");
	else
	{
		p = pre->next;
		pre->next = p->next;
		free(p);
	}
}

//不带头结点的单链表的删除操作
LinkList DelList (LinkList head, int i)
{
	if (NULL == head)
		cout << ("Empty!");
		
	if (0 == i)
	{
		p = head;
		head = head->next;
		free(p);
		return head;
	}
	
	pre = head;
	k = 0;
	
	while (pre->next != NULL && k++ < i)
		pre = pre->next;
		
	if (!(pre->next) && k <= i)		
		cout << ("Error!");
	else
	{
		p = pre->next;
		pre->next = p->next;
		free(p);
	}
	
	return head;
}





//循环单链表合并
void Mertge (LinkList ra, LinkList rb)
{
	pra = ra->next;
	while (pra->next != ra)
		pra = pra->next;
	prb = rb->next;
	while (prb->next != rb)
		prb = prb->next;
	prb->next = ra;
	pra->next = rb->next;
	free(rb);
}
//双向链表
typedef struct DNode
{
	ElemType data;
	struct DNode *prior, *next;
}DoubleNode, *DoubleList;

//双向循环链表插入
void DLinkIns (DoubleList head, int i, ElemType x)
{
	p = head->next;
	int k = 0;
	while (p != head && k++  < i)
		p = p->next;
	if (k != i)
		cout << "Error!";
	else
	{
		s = (DoubleList)malloc (sizeof(DoubleList));
		s->data = x;
		s->prior = p->prior;
		p->prior->next = s;
		s->next = p;
		p->prior = s;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值