本文最后更新于2022年12月08日,已超过878天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
您阅读这篇文章共耗时:
循环链表的入队出队
题目是这样的: 设以不带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针。编写相应的入队和出队程序。
如果带头尾指针那就很简单了,不带头尾指针只能在函数中新建工作指针来操作。
思考方向
队列嘛,先进先出,用循环链表存储,再有个尾指针,逻辑结构就是这样的
入队
入队分三步:
新结点指向头结点
尾结点指向新节点
尾指针指向新的尾结点
出队
先进先出嘛,头结点删了就行
理论上直接尾结点指向第二个就完事了
但这样只是找不到了原来的头结点,它依然是存在于内存中的,虽说眼不见为净吧
,但它确确实实是存在的循环队列出队循环队列出队,一旦堆积,这队列容量就会越来越小。
所以还是要把它删除掉的(delete)
具体代码
存储数据就以int为例,其他的自己适应性更改就行
结点
struct Node{
int data;
Node* next;
};//创建结构体——结点
循环队列
class CirQueue {
private:
Node* p;
public:
CirQueue();
CirQueue(int a[], int n);
void EnQueue(int a);
void DeQueue();
};
CirQueue::CirQueue() {
p = nullptr;
}
CirQueue::CirQueue(int a[], int n) {
p = new Node;
p->data = a[0];
Node* q = p;//存储首地址,用于最后尾巴指过来
for (int i = 1; i next = new Node;
p = p->next;
p->data = a[i];
}
p->next = q;
}//初始化循环队列
入队
void CirQueue::EnQueue(int a) { Node* q = new Node; q->data = a; q->next = p->next;//第一步 p->next = q;//第二步 p = q;//第三步 cout [1]: https://xuan.ddwoo.top/index.php/archives/528/ [2]: https://xuan.ddwoo.top/index.php/archives/530/ [3]: https://xuan.ddwoo.top/index.php/archives/535/ 本文来自投稿,不代表本站立场,如若转载,请注明出处:http://xuan.ddwoo.top/index.php/archives/540/