news 2026/5/23 15:34:41

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

作者头像

张小明

前端开发工程师

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/5/11 18:36:15

90%的老板用人翻车,问题究竟出在哪一步?

问&#xff1a;为什么大多数企业招聘效果不佳&#xff0c;用人频频"翻车"&#xff1f;核心痛点是什么&#xff1f;答&#xff1a;深度调研显示&#xff0c;90%的企业用人问题根源在于缺乏系统化的人才甄别工具&#xff0c;导致招聘决策过度依赖主观经验而非科学数据。…

作者头像 李华
网站建设 2026/5/21 5:40:44

AOP动态代理与静态织入区别详解,哪种方式更适合你的项目?

在软件开发中&#xff0c;AOP&#xff08;面向切面编程&#xff09;是解决横切关注点的重要技术。其中动态代理和静态织入是实现AOP的两种主要方式。作为长期应用这两种技术的架构师&#xff0c;我认为理解它们的区别和适用场景对设计健壮的系统至关重要。 AOP动态代理和静态织…

作者头像 李华
网站建设 2026/5/14 16:19:41

基于Java的市政工程勘察设计智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 市政工程勘察设计智慧管理系统旨在提升传统管理模式的效率与准确性。相比常规系统&#xff0c;本项目聚焦于具体功能模块构建&#xff0c;如会员管理、字典管理和各类项目及任务管理等&#xff0c;从而实现数据录入快速准确且易于审核的功…

作者头像 李华
网站建设 2026/5/5 16:45:59

2026年国内低代码与AI应用构建工具选型指南

到了2026年&#xff0c;低代码工具早已不是简单的“拖拉拽”弄个表单那么简单了。随着AI Native&#xff08;AI原生&#xff09;趋势的深化&#xff0c;我们构建应用的方式发生了本质变化&#xff1a;以前是人去适应工具的操作逻辑&#xff0c;现在是工具通过AI来理解人的意图。…

作者头像 李华
网站建设 2026/5/20 21:36:10

什么是VDSL

文章目录VDSL和ADSL的区别VDSL工作系统VDSL速率VDSL应用场景有哪些VDSL技术演进VDSL&#xff08;超高速数字用户线路&#xff09;是一种基于传统电话铜线的高速宽带接入技术&#xff0c;属于xDSL&#xff08;数字用户线路&#xff09;家族的重要成员。VDSL旨在提供比早期ADSL&a…

作者头像 李华