news 2026/6/10 15:19:02

数据结构-双链表实现栈和队列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据结构-双链表实现栈和队列

栈和队列是比较简单且常见的数据结构,你可以使用C++ STL中的stack和queue容器来实现栈和队列,当然,如果你比较有追求,也可以手搓栈和队列(虽然这个搓起来不是特别麻烦),本文重点讲解如何实现双链表实现栈和队列。

栈和队列介绍

一句话带过吧

栈:先进后出,可乐瓶见过吧,你把东西放进去以后,必须把上面的拿完你才可以拿到你想要的

队列:先进先出,就是食堂排队,先排进去的先出来

栈的代码实现

C++STL容器

#include<iostream> #include<stdio.h> #include<stack> using namespace std; // struct Node{ // Node* pre; // Node* next; // int data; // }; int main(){ stack <int> t; // 创建栈 t.push(1); //压栈 t.pop(); //出栈 for(int i = 0 ; i < 10 ; i++){ t.push(i); //循环入栈 } int temp = t.top(); //取栈顶元素 cout << temp << endl; }

对这个操作不熟悉的也可以去这个网站看一下,一看就懂了

C++ 容器类 | 菜鸟教程https://www.runoob.com/cplusplus/cpp-libs-stack.html

双链表实现栈

双链表因为可以从尾向头查找,所以在实现栈和队列上会有较低的复杂度

#include<iostream> #include<stdio.h> using namespace std; struct Node{ Node* pre; Node* next; int data; }; Node* Tail = NULL; //定义尾节点 void push(int data){//压栈操作 data为你想压入的元素 Node* top = new Node(); top -> data = data; top -> next = NULL; top -> pre = Tail; Tail -> next = top; Tail = top; } int pop(){//出栈操作,同时返回栈顶元素 int data; data = Tail -> data; Node* newtop = Tail -> pre; delete Tail; Tail = newtop; return data; } int main(){ Node* A = new Node(); A -> data = 1; A -> next = Tail; A -> pre = NULL; Tail = A; push(2); push(3); push(4); int temp = pop(); cout << temp << endl; cout << Tail -> data << endl; }

队列的代码实现

C++STL容器实现

#include<iostream> #include<stdio.h> #include<queue> using namespace std; // struct Node{ // Node* pre; // Node* next; // int data; // }; int main(){ queue <int> q; for(int i = 0 ; i < 10 ; i++){ q.push(i); //循环入队 } for(int i = 0 ; i < 10 ; i++){ int tail = q.back(); //获取队尾元素 int head = q.front(); //获取队首元素 q.pop(); //出队操作 cout << head << ' ' << tail << endl; } }

同样的,不熟悉的可以去看看这个网站C++ 容器类 | 菜鸟教程https://www.runoob.com/cplusplus/cpp-libs-queue.html

双链表实现队列

#include<iostream> #include<stdio.h> #include<queue> using namespace std; struct Node{ Node* pre; Node* next; int data; }; Node* Tail = NULL; //定义尾节点 Node* Head = NULL; void push(int data){ Node* back = new Node(); back -> data = data; back -> next = NULL; back -> pre = Tail; Tail -> next = back; Tail = Tail -> next; } void pop(){ Node* newfront = Head -> next; delete Head; Head = newfront; } int main(){ Node* A = new Node(); A -> data = 10086; A -> next = NULL; A -> pre = NULL; Head = A; Tail = A; for(int i = 0 ; i < 10 ; i++){ push(i); cout << Head -> data << ' ' << Tail -> data << endl; } printf("----------------------------\n"); for(int i = 0 ; i < 10 ; i++){ cout << Head -> data << ' ' << Tail -> data << endl; pop(); } }

这样就实现了手搓 stack 和 queue

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 20:02:20

张伟的职场奇遇记2-AI抢我饭碗?

一 “张伟&#xff0c;你被AI取代了。” 周三下午三点&#xff0c;老板老马站在张伟工位前&#xff0c;语气平静得像在通知茶水间没咖啡了。他手里拿着一份打印稿&#xff0c;纸角微微卷起&#xff0c;像是刚从打印机里抢救出来的战报。 张伟正埋头修改第41版椰子水广告语—…

作者头像 李华
网站建设 2026/6/10 12:38:37

张伟的职场奇遇记4-咖啡机成精了

一 创意无限广告公司有两样东西从不罢工&#xff1a; 一是老板老马的韭菜盒子味儿&#xff0c;二是茶水间那台银色胶囊咖啡机。 这台机器是公司五周年庆时老马花八千块买的&#xff0c;号称“意大利原装&#xff0c;萃取灵魂”。可实际上&#xff0c;它脾气比甲方还大——偶尔…

作者头像 李华
网站建设 2026/6/10 12:39:30

6个黑客教程网站,小白也能成大牛!

6个黑客教程网站&#xff0c;小白也能成大牛&#xff01; 一般而言&#xff0c;黑客主要有两种&#xff1a;黑帽黑客、白帽黑客。 黑帽黑客为了个人利益&#xff0c;利用自身的计算机系统知识侵入系统&#xff0c;这种做法是违法的&#xff0c;需要负法律责任&#xff1b; 而…

作者头像 李华
网站建设 2026/6/10 15:03:55

网络安全红蓝对抗是什么?其主要目的是什么?

在网络安全领域中&#xff0c;红蓝对抗是非常重要的存在&#xff0c;它是一种模拟性的演练&#xff0c;用于评估和提高组织的网络安全防御能力。所谓的红蓝对抗&#xff0c;就是红队与蓝队之间进行对抗&#xff0c;那么网络安全中红队和蓝队是什么?我们通过下文来学习一下。 …

作者头像 李华
网站建设 2026/6/10 14:41:23

99%计算机学生都选错了方向!4大主流赛道让你少走3年弯路

99%计算机学生都选错了方向&#xff01;4大主流赛道让你少走3年弯路 大三学生小李的困惑代表了90%计算机专业学生的现状. 学了三年编程. 依然不知道自己适合哪个方向. 看着学长们有的进了大厂, 有的转行做产品, 有的创业失败又回到传统IT企业. 更多的是在各种培训班之间徘徊.…

作者头像 李华
网站建设 2026/6/10 11:14:01

郑斯仁公益献唱《我要去莆田》,乡音寄情绘就莆田新年烟火气

当熟悉的闽韵旋律响起&#xff0c;莆田籍艺人郑斯仁用一首《我要去莆田》&#xff0c;将游子对家乡的眷恋、对公益的热忱&#xff0c;都揉进了2026年莆田闹元宵过大年的红火里。这首专为“全到莆田过大年”活动打造的公益歌曲&#xff0c;不仅是他为家乡春节献上的首份专属礼物…

作者头像 李华