数据结构之循环链表

预备知识

单链表

1.0循环链表的定义

如果把单链表的尾部的next指针有指向空转为指向头结点,那么就构成了循环链表

由于找到链表的头部的时间复杂度是O(1)
找到链表尾部的时间复杂度是 O(n) 但是我们对链表的操作一般都是对尾巴和头进行处理的
所以最优解是 不设置头指针,改为设置尾指针rear这样,头节点就是 rear->next
尾节点就是rear 这是大多数循环链表的处理方法

2.0 循环链表的基本操作

循环链表没有增加任何存储量,只是链接方式改变了,所以其他操作与单链表相同,只是需要注意循环条件防止进入死循环就可以了。

举个栗子

//头插法建立循环链表
LinkList(int a[],int n){        //数组形参数作为给单链表赋值 
            first = new Node;
            first->next = first;         //立一个只有头结点的空链表
           //头插法第一个元素是
            Node *s = new Node;
            s->data = a[0];
            s->next = first->next;
            first->next = s;
            rear = s;
            for(int i = 1;i < n;i++ ){
                Node *s = new Node;
                s->data = a[i];         //赋值 
                s->next = first->next;  //每个新建的结点都要链接之前头结点所指向的结点 
                first->next = s;        //头插法,每个元素结点都插在头结点后 

            }        
        } 

各个算法的时间性能和单链表一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值