双向循环链表

8 篇文章 0 订阅

双向循环链表

在这里插入图片描述

插入操作

在这里插入图片描述

s->next = p;
s->prior = p->prior;
p->prior->next = s;
p->prior = s;

删除操作

在这里插入图片描述

p->prior ->next= p->next;
p->next ->prior = p->priof;
free(p);  //释放内存空间

总结:双向链表可以有效提高算法的时间性能,用空间换取时间

案例

在这里插入图片描述

程序

#include <iostream>
using namespace std;

typedef char ElemType;

typedef struct DualNode
{
	ElemType data;
	struct DualNode* prior;
	struct DualNode* next;
}DualNode , *DualLinkList;


//建立双向循环链表
bool creatDualList(DualLinkList *l)
{
	const char* a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
	DualNode* p, * q;
	*l = (DualNode*)malloc(sizeof(DualNode));

	if (!(*l))
		return false;

	(*l)->next = (*l)->prior = nullptr;
	p = (*l);

	for (int i = 0; i < 26; i++)
	{
		
		q = (DualNode*)malloc(sizeof(DualNode));
		if (!q)
		{ 
			return false;
		}
		
		q->data = a[i];
		q->prior = p;
		q->next = p->next;

		p->next = q;
		p = q;
	}

	p->next = (*l)->next;
	(*l)->next->prior = p;
	
	(*l) = p->next;   //将开始结点*l   固定在'A' 处

	return true;
}


void SetLinkList(DualLinkList *l,int i)
{
	if (i>0)
	{
		//do while 和while 两种循环结构
		do 
		{
			(*l) = (*l)->next;
			
		} while (--i);

		/*while (i)
		{
			(*l) = (*l)->next;
			i--;
		}*/

	}
	if (i < 0)
	{
		do
		{
			(*l) = (*l)->prior;
		} while (++i);

		/*while (i)
		{
			(*l) = (*l)->prior;
			i++;
		}*/


	}
}

int main()
{
	int n;
	DualLinkList l;
	while (true)
	{
		creatDualList(&l);
		cout << "请输入一个整数:";
		cin >> n;

		SetLinkList(&l, n);

		for (int i = 0; i < 26; i++)
		{			
			cout << l->data;
			l = l->next;
		}
		cout << endl;
	}
	
	system("pause");
	return 0;
}

参考

小甲鱼

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值