登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
业界
›
重生之数据结构与算法----队列&栈
重生之数据结构与算法----队列&栈
[ 复制链接 ]
呼延含玉
2025-6-4 22:21:18
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
简介
上文说到,数据结构只有两种。其它的数据结构都是它的整花活。
栈
栈只能在表的一端(称为栈顶)进行插入和删除操作,遵循 “后进先出”(Last In First Out,LIFO)的原则。就像生活中的一摞盘子,最后放上去的盘子会最先被拿走
队列
它只允许在表的一端进行插入操作(队尾),在另一端进行删除操作(队头),遵循 “先进先出”(First In First Out,FIFO)的原则。类似于生活中排队买票,先排队的人先买到票离开队列。
用链表实现stack
public class MyLinkedStack<T>()
{
public static void Run()
{
var stack = new MyLinkedStack<string>();
stack.Push("aaaa");
stack.Push("bbbb");
stack.Push("cccc");
stack.Push("dddd");
while (stack.Count > 0)
{
Console.WriteLine(stack.Pop());
}
}
private LinkedList<T> _linked = new LinkedList<T>();
/// <summary>
/// 入栈
/// O(1)
/// </summary>
/// <param name="item"></param>
public void Push(T item)
{
_linked.AddFirst(item);
}
/// <summary>
/// 出栈
/// O(1)
/// </summary>
/// <returns></returns>
public T Pop()
{
var first = _linked.First;
_linked.RemoveFirst();
return first.Value;
}
/// <summary>
/// 查看栈顶
/// </summary>
/// O(1)
/// <returns></returns>
public T Peek()
{
return _linked.First.Value;
}
public int Count { get { return _linked.Count; } }
}
复制代码
用链表实现queue
public class MyLinkedQueue<T>
{
public static void Run()
{
var queue = new MyLinkedQueue<string>();
queue.Enqueue("aaa");
queue.Enqueue("bbb");
queue.Enqueue("ccc");
queue.Enqueue("ddd");
while (queue.Count > 0)
{
Console.WriteLine(queue.Dequeue());
}
}
private LinkedList<T> _linked = new LinkedList<T>();
/// <summary>
/// 入列
/// </summary>
/// <param name="item"></param>
public void Enqueue(T item)
{
_linked.AddFirst(item);
}
/// <summary>
/// 出列
/// </summary>
/// <returns></returns>
public T Dequeue()
{
var last= _linked.Last;
_linked.RemoveLast();
return last.Value;
}
/// <summary>
/// 查看队列顶
/// </summary>
/// <returns></returns>
public T Peek()
{
return _linked.First.Value;
}
public int Count { get { return _linked.Count; } }
}
复制代码
用数组实现stack
public class MyArrayStack<T>()
{
public static void Run()
{
var stack = new MyLinkedStack<string>();
stack.Push("aaaa");
stack.Push("bbbb");
stack.Push("cccc");
stack.Push("dddd");
while (stack.Count > 0)
{
Console.WriteLine(stack.Pop());
}
}
private List<T> _list=new List<T>();
/// <summary>
/// 入栈
/// O(1)
/// </summary>
/// <param name="item"></param>
public void Push(T item)
{
_list.Add(item);
}
/// <summary>
/// 出栈
/// O(1)
/// </summary>
/// <returns></returns>
public T Pop()
{
var v = _list[_list.Count - 1];
_list.RemoveAt(_list.Count - 1);
return v;
}
/// <summary>
/// 查看栈顶
/// </summary>
/// O(1)
/// <returns></returns>
public T Peek()
{
return _list[_list.Count - 1];
}
public int Count { get { return _list.Count; } }
}
复制代码
用数组实现queue
由于queue先进先出的特性,list头部增删元素的复杂度是O(N),不符合性能要求,我们可以使用前文介绍的环形数组,来实现list头部增删的O(1)
public class MyArrayQueue<T>
{
public static void Run()
{
var queue = new MyArrayQueue<string>();
queue.Push("aaaa");
queue.Push("bbbb");
queue.Push("cccc");
queue.Push("dddd");
while (queue.Count > 0)
{
Console.WriteLine(queue.Pop());
}
}
private CircularArray<T> _list = new CircularArray<T>();
/// <summary>
/// 入栈
/// O(1)
/// </summary>
/// <param name="item"></param>
public void Push(T item)
{
_list.AddFirst(item);
}
/// <summary>
/// 出栈
/// O(1)
/// </summary>
/// <returns></returns>
public T Pop()
{
var v = _list.GetLast();
_list.RemoveLast();
return v;
}
/// <summary>
/// 查看栈顶
/// </summary>
/// O(1)
/// <returns></returns>
public T Peek()
{
return _list.GetFirst();
}
public int Count { get { return _list.Count; } }
}
复制代码
队列的变种:双端队列
所谓双端队列,主要是比普通队列,多一个出入口,可以从队列的两头进行插入,删除。但也破坏了先进先出的原则。
日常场景使用不多。只有 Python用得多一些,因为Python标准库没有提供内置的栈和队列,一般会用双端队列来模拟标准队列。
public interface IMyQueue<T>
{
/// <summary>
/// 从头入列
/// </summary>
/// <param name="item"></param>
void EnqueueFirst(T item);
/// <summary>
/// 从头出列
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
T DequeueFirst(T item);
/// <summary>
/// 从尾入列
/// </summary>
void EnqueueLast();
/// <summary>
/// 从头出列
/// </summary>
/// <returns></returns>
T DequeueLast();
}
复制代码
实现比较简单,不再重复,参考普通队列思路即可。链表/环形数组均可实现。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
重生
数据结构
算法
队列
amp
相关帖子
从直觉到算法:贝叶斯思维的技术底层与工程实现
zq—算法基础:时空复杂度(1)
浅谈两大算法模型评估指标
LLM 算法岗 | 八股问答(3)· 强化学习与 RLHF
单调队列优化多重背包 学习笔记 & 详解
算法~时间戳计算两个日期是否为同天同时同分
3.二分算法
25.Acwing基础课第829题-简单-模拟队列
【渗透测试】玄机&Maze 全过程wp
SpringCloud进阶--RabbitMQ消息队列(完结)
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
从直觉到算法:贝叶斯思维的技术底层与工程实现
2
321
劝匠注
2026-03-18
业界
zq—算法基础:时空复杂度(1)
0
472
章绮云
2026-03-18
安全
浅谈两大算法模型评估指标
2
922
嗅叽
2026-03-19
业界
LLM 算法岗 | 八股问答(3)· 强化学习与 RLHF
3
852
乙荒
2026-03-21
业界
单调队列优化多重背包 学习笔记 & 详解
2
981
公新蕾
2026-03-25
安全
算法~时间戳计算两个日期是否为同天同时同分
1
5
岭猿
2026-03-26
安全
3.二分算法
1
46
雨角
2026-03-27
安全
25.Acwing基础课第829题-简单-模拟队列
1
103
姘轻拎
2026-04-02
安全
【渗透测试】玄机&Maze 全过程wp
0
51
于映雪
2026-04-06
业界
SpringCloud进阶--RabbitMQ消息队列(完结)
0
595
郁兰娜
2026-04-07
回复
(27)
轩辕娅童
2025-10-17 13:54:53
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
很好很强大 我过来先占个楼 待编辑
段干叶农
2025-10-24 00:44:49
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享
赘暨逢
2025-11-10 12:23:29
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
鼓励转贴优秀软件安全工具和文档!
晌集涟
2025-12-9 18:08:10
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
师悠逸
2025-12-10 13:52:16
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
新版吗?好像是停更了吧。
石娅凉
2025-12-28 20:37:07
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
战匈琼
2026-1-19 02:48:26
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
热心回复!
科元料
2026-1-19 11:37:17
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
热心回复!
凳舒
2026-1-20 16:12:43
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
晁红叶
2026-1-23 04:20:14
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
刃减胸
2026-1-26 05:18:56
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
章海
2026-2-5 09:09:08
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
迫蔺
2026-2-8 07:48:55
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
时思美
2026-2-8 11:49:29
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
用心讨论,共获提升!
卢莹洁
2026-2-9 08:26:32
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
喜欢鼓捣这些软件,现在用得少,谢谢分享!
钿稳铆
2026-2-9 21:54:32
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢楼主提供!
琦谓
2026-2-10 11:06:24
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享
乱蚣
2026-2-11 04:30:16
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
卓卞恻
2026-2-11 16:27:42
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
呼延含玉
2026-2-11 16:27:42
关注
0
粉丝关注
33
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991126
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9516
6
宋子
9876
7
韶又彤
9909
8
荪俗
8990
9
蓬森莉
9868
10
俞瑛瑶
10000
查看更多
今日好文热榜
592
SpringCloud进阶--RabbitMQ消息队列(完结
416
一、先了解:MCP 公开服务市场
256
《评岐金兰〈自感类型学〉:一种实然内在观
393
如何在手机微信上免费批量删除PDF页面?
154
紧急!GitHub Copilot 宣布使用个人数据训
654
龙芯2k0300 - 走马观碑组Gazebo仿真环境搭
5
理论都会,实战就废?7个分析模板,帮你打
446
开源重置 沙丘2 游戏 · Dune Legacy
957
vue3这些常见指令你封装了吗
423
【Ubuntu】配置 WSL 环境时,启动虚拟机平
6
Flutter3.41+DeepSeek智能AI应用|flutter3+
275
深度解析Claude Code 51万行源码背后的设计
818
AI时代的变更到底怎么管?(抛砖引玉版)
699
OJ平台远端代码沙箱开发第一周:需求拆解与
980
万字详解 RAG 基础概念:什么是 RAG? 为什
398
天谋科技入选北京市 2026 年第一批专精特新
160
AI对普通人到底有什么用?这8个场景告诉你
81
【节点】[Reciprocal节点]原理解析与实际应
254
为什么使用 Skillsbase 维护自己的 Skills
369
WorkBuddy:快速开启龙虾(OpenClaw)之旅