东莞网站设计的公司公司网站模板免费下载

张小明 2026/1/10 9:07:00
东莞网站设计的公司,公司网站模板免费下载,校园网网站建设规划,做表格的网站本篇来讲解栈与队列~模块一#xff1a;栈#xff08;Stack#xff09;1. 基础知识栈是一种后进先出#xff08;LIFO#xff09; 的数据结构#xff0c;只允许在一端#xff08;称为栈顶#xff09;进行插入和删除操作。核心操作包括#xff1a;压栈#xff08;Push栈Stack1. 基础知识栈是一种后进先出LIFO的数据结构只允许在一端称为栈顶进行插入和删除操作。核心操作包括压栈Push向栈顶添加元素。弹栈Pop从栈顶移除元素。查看栈顶Peek获取栈顶元素但不移除。判空isEmpty检查栈是否为空。容量Size获取栈中元素数量。2. 数组实现栈使用数组实现栈时需维护一个指向栈顶的指针通常用top表示。数组大小固定需处理栈满的情况。代码实现public class ArrayStack { private int maxSize; // 栈的最大容量 private int[] stack; // 存储元素的数组 private int top; // 栈顶指针初始为-1 public ArrayStack(int size) { maxSize size; stack new int[maxSize]; top -1; } // 压栈 public void push(int value) { if (isFull()) { throw new RuntimeException(栈已满); } stack[top] value; } // 弹栈 public int pop() { if (isEmpty()) { throw new RuntimeException(栈为空); } return stack[top--]; } // 查看栈顶 public int peek() { if (isEmpty()) { throw new RuntimeException(栈为空); } return stack[top]; } // 判空 public boolean isEmpty() { return top -1; } // 判满 public boolean isFull() { return top maxSize - 1; } // 获取栈中元素数量 public int size() { return top 1; } }3. 双链表实现栈双链表双向链表每个节点包含前驱和后继指针实现栈时可灵活地在头部插入和删除节点时间复杂度为O(1)。代码实现public class LinkedListStack { private static class Node { int value; Node prev; Node next; Node(int value) { this.value value; } } private Node top; // 栈顶节点 private int size; // 栈中元素数量 public LinkedListStack() { top null; size 0; } // 压栈在链表头部插入 public void push(int value) { Node newNode new Node(value); if (top ! null) { newNode.next top; top.prev newNode; } top newNode; size; } // 弹栈移除链表头部节点 public int pop() { if (isEmpty()) { throw new RuntimeException(栈为空); } int value top.value; top top.next; if (top ! null) { top.prev null; } size--; return value; } // 查看栈顶 public int peek() { if (isEmpty()) { throw new RuntimeException(栈为空); } return top.value; } // 判空 public boolean isEmpty() { return size 0; } // 获取栈中元素数量 public int size() { return size; } }模块二队列Queue1. 基础知识队列是一种先进先出FIFO的数据结构元素从一端队尾插入从另一端队首删除。核心操作包括入队Enqueue向队尾添加元素。出队Dequeue从队首移除元素。查看队首Peek获取队首元素但不移除。判空isEmpty检查队列是否为空。容量Size获取队列中元素数量。队列的典型应用场景包括任务调度如线程池、消息队列、广度优先搜索BFS等。2. 数组实现队列循环队列数组实现队列时需解决假溢出问题即数组前部有空间但尾部已满。通过循环数组head和tail指针循环移动可高效利用空间。代码实现public class CircularQueue { private int maxSize; // 队列最大容量 private int[] queue; // 存储元素的数组 private int head; // 队首指针指向待出队元素 private int tail; // 队尾指针指向待插入位置 public CircularQueue(int size) { maxSize size 1; // 预留一个空位以区分队满和队空 queue new int[maxSize]; head 0; tail 0; } // 入队 public void enqueue(int value) { if (isFull()) { throw new RuntimeException(队列已满); } queue[tail] value; tail (tail 1) % maxSize; // 循环移动 } // 出队 public int dequeue() { if (isEmpty()) { throw new RuntimeException(队列为空); } int value queue[head]; head (head 1) % maxSize; // 循环移动 return value; } // 查看队首 public int peek() { if (isEmpty()) { throw new RuntimeException(队列为空); } return queue[head]; } // 判空head tail public boolean isEmpty() { return head tail; } // 判满(tail 1) % maxSize head public boolean isFull() { return (tail 1) % maxSize head; } // 获取队列中元素数量 public int size() { return (tail - head maxSize) % maxSize; } }3. 双链表实现队列双链表实现队列时在链表尾部插入节点入队在头部删除节点出队时间复杂度均为O(1)。代码实现public class LinkedListQueue { private static class Node { int value; Node prev; Node next; Node(int value) { this.value value; } } private Node head; // 队首节点 private Node tail; // 队尾节点 private int size; // 队列中元素数量 public LinkedListQueue() { head null; tail null; size 0; } // 入队在链表尾部插入 public void enqueue(int value) { Node newNode new Node(value); if (tail null) { head newNode; tail newNode; } else { tail.next newNode; newNode.prev tail; tail newNode; } size; } // 出队移除链表头部节点 public int dequeue() { if (isEmpty()) { throw new RuntimeException(队列为空); } int value head.value; head head.next; if (head ! null) { head.prev null; } else { tail null; // 队列已空 } size--; return value; } // 查看队首 public int peek() { if (isEmpty()) { throw new RuntimeException(队列为空); } return head.value; } // 判空 public boolean isEmpty() { return size 0; } // 获取队列中元素数量 public int size() { return size; } }总结对比实现方式栈时间复杂度队列时间复杂度特点数组所有操作O(1)所有操作O(1)需处理容量限制内存连续双链表所有操作O(1)所有操作O(1)动态扩容内存非连续栈优先使用java.util.Stack或java.util.Deque如ArrayDeque。队列优先使用java.util.Queue的实现类如LinkedList、ArrayDeque。不过都可以使用LinkedList。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

购买友情链接上海优化价格

用51单片机“弹”出第一首歌:深入理解无源蜂鸣器的PWM调音实现你有没有试过让一块最基础的51单片机“唱歌”?听起来像天方夜谭,但其实只需要一个蜂鸣器、几行代码和一点点定时器的知识,就能让它奏响《小星星》的第一句。这不仅是嵌…

张小明 2026/1/2 2:47:30 网站建设

机械门户网站建设特点林业网站源码

线性代数终极指南:5个快速掌握矩阵世界的完整路径 【免费下载链接】The-Art-of-Linear-Algebra Graphic notes on Gilbert Strangs "Linear Algebra for Everyone" 项目地址: https://gitcode.com/gh_mirrors/th/The-Art-of-Linear-Algebra 你是否…

张小明 2026/1/8 17:29:59 网站建设

网站搭建是哪个岗位做的事儿什么叫域名

InfluxDB 3.0时序数据库终极实战:从零到精通的快速入门指南 【免费下载链接】influxdb Scalable datastore for metrics, events, and real-time analytics 项目地址: https://gitcode.com/gh_mirrors/inf/influxdb 还在为海量时序数据处理而头疼吗&#xff…

张小明 2026/1/10 8:28:55 网站建设

200做网站网站规划与开发实训室建设

AtomGit Pocket 新手入门教程 教程略有修改GitCode-AtomGit,但功能实现是一样的 本教程将指导完全没有编程经验的新手如何使用 AtomGit Pocket 应用。AtomGit Pocket 是一个基于 ArkUI-X 框架开发的跨平台移动应用,原生支持 HarmonyOS,可以…

张小明 2025/12/31 8:22:34 网站建设

做那种事的网站平湖市住房建设局网站

3个关键技术突破财经数据分析瓶颈:从数据获取到决策支持的完整方案 【免费下载链接】akshare 项目地址: https://gitcode.com/gh_mirrors/aks/akshare 在当今数据驱动的投资时代,财经数据分析已成为专业投资者和量化研究者的核心能力。然而&…

张小明 2026/1/7 4:21:48 网站建设

合肥网站建设新闻营销图片制作表情包怎么做

GPT-SoVITS实战案例:如何用少量数据训练高保真TTS 在语音技术飞速发展的今天,我们早已不再满足于“能说话”的机器。无论是智能助手、有声读物,还是虚拟主播和无障碍设备,用户对语音合成(Text-to-Speech, TTS&#xff…

张小明 2025/12/28 6:52:28 网站建设