数据结构循环链表

循环链表:
循环链表的定义:

循环链表是指头尾相接的一种链表(即:最后一个指针域指向头结点,整个链表形成一个环状)

优点

从一个任意一个结点出发都能找到其他结点

特点

循环链表没有NULL指针,在遍历结束后的判断条件是p!=L(头指针是它的判定条件)

尾结点表示单循环链表

指针R指向尾结点(即最后一个结点)那么a1的存储位置表示:R->next->next,an的存储位置的表示:

an=R;时间复杂度都为O(1);

头结点表示单循环链表

找a1的时间复杂度为O(1)

找an的时间复杂度O(n)

基本操作的实现:
数据结点的结构体定义
typedef struct Lnode {

	int data;
	struct Lnode* next;
}Lnode, * LinkList;

双向链表的创建:
void createLinkList(LinkList& L, int n) {
	L = (Lnode*)malloc(sizeof(Lnode));
	L->next = L;
	Lnode* p1 = L;
	
	for (int i = n; i > 0; i--) {
		Lnode* p = (Lnode*)malloc(sizeof(Lnode));
		printf("input data:");
		scanf("%d", &p->data);
		p->next = L;
		p1->next = p;
		p1 = p;
	}
}
双向链表的遍历
void ergodicList(LinkList& L) {
	Lnode* R;
	R = L->next;
	while (R!=L) {
		printf("data:%d", R->data);
		R = R->next;
	}
}
通过尾结点遍历链表
void ergodicList_T(LinkList& pTail) {

	Lnode *R;
	R = pTail->next->next;
	while (R != pTail->next) {
		printf("data:%d", R->data);
		R = R->next;
	}
}
合并两个循环链表
Lnode * LinkListMerge(LinkList& p1, LinkList& p2){
	
	Lnode* t = p1->next;
	p1->next = p2->next->next;
	free(p2->next);
	p2->next = t;
	p1 = p2;
	return p2;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值