循环队列出队-单个指针下循环链表的入队与出队
2023-02-18 16:47:34 时间
循环链表的入队出队
题目是这样的: 设以不带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针。编写相应的入队和出队程序。
如果带头尾指针那就很简单了,不带头尾指针只能在函数中新建工作指针来操作。
思考方向
队列嘛,先进先出,用循环链表存储,再有个尾指针,逻辑结构就是这样的
入队
入队分三步:
新结点指向头结点
尾结点指向新节点
尾指针指向新的尾结点
出队
先进先出嘛,头结点删了就行
理论上直接尾结点指向第二个就完事了
但这样只是找不到了原来的头结点,它依然是存在于内存中的,虽说眼不见为净吧
,但它确确实实是存在的循环队列出队循环队列出队,一旦堆积,这队列容量就会越来越小。
所以还是要把它删除掉的(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/
本文共 345 个字数,平均阅读时长 ≈ 1分钟
相关文章
- Java编程中忽略这些细节,Bug肯定找上你
- 9个问题,带你掌握流程控制语句中的java原理
- 从IDC Marketscape报告看区块链政务数字化未来:权威解读新热点、新机遇
- chatGPT的火爆,并不偶然
- React 开发 | 常用 Hooks
- JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了【JDK12特性讲解】
- Eolink 让我“重新认识“了自动化测试...
- 老板:你也把咱们网站弄成灰色——网站变灰色如何实现
- iptables规则案例
- ‘极锐’-一种新的锐化算法
- PS/LR滤镜插件套装 Nik Collection v5.3.0 Win/Mac
- Chrome插件:uBlock Origin – Chrome浏览器高效低占用的广告拦截插件
- 前端与区块链
- 云原生之微服务
- 集群动态环境管理神器 Modules
- 记 os_object_release Crash 排查
- 记 libAccessibility 通知 Crash 排查
- Ant Design Pro 中 点击子菜单的时候,其他菜单不自动收起来
- ETC 可视化
- 1267-Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLIC for o...