
Java~分别用顺序表和链表实现栈和队列,以及库的栈和队列的使用
发布日期:2021-05-07 13:55:44
浏览次数:12
分类:精选文章
本文共 3955 字,大约阅读时间需要 13 分钟。
栈与队列基础知识与实现
栈的概念与实现
栈是一种特殊的线性表,其操作具有严格的先进先出(LIFO,Last In First Out)的特性。栈的数据插入和删除只能在固定的一端进行,称为栈顶,另一端称为栈底。栈的数据存储结构可以用数组或链表来实现,具体选择取决于性能需求和数据规模。
栈的操作
- 压栈(Push):将数据元素插入栈顶。
- 出栈(Pop):从栈顶删除并取出数据元素。
- 查看栈顶元素(Peek):查看当前栈顶的数据元素,不改变栈的状态。
栈的实现
以下是使用数组和链表两种数据结构实现栈的代码示例:
数组实现的栈
public class MyStack { private int[] array = new int[100]; private int size = 0; public void push(int value) { array[size] = value; size++; } public Integer pop() { if (size <= 0) { return null; } int ret = array[size - 1]; size--; return ret; } public Integer peek() { if (size <= 0) { return null; } return array[size - 1]; }}
链表实现的栈
public class MyStack2 { static class Node { public int val; public Node next; public Node(int val) { this.val = val; } } private Node head; private Node tail; public void push(int value) { Node newNode = new Node(value); if (head == null) { head = newNode; tail = newNode; } else { newNode.next = head; head = newNode; } } public Integer pop() { if (head == null) { return null; } Node removedNode = head; head = head.next; return removedNode.val; } public Integer peek() { if (head == null) { return null; } return head.val; }}
队列的概念与实现
队列是一种只允许在一端插入数据、另一端删除数据的特殊线性表,其操作具有先进先出的特性。队列的插入操作称为入队列,删除操作称为出队列。队列的数据存储结构可以用数组或链表实现,链表结构在某些情况下表现更优。
队列的操作
- 入队列(Enqueue):将数据元素插入队尾。
- 出队列(Dequeue):从队头删除并取出数据元素。
- 查看队头元素(Peek):查看当前队头的数据元素,不改变队列的状态。
队列的实现
以下是使用链表和数组两种数据结构实现队列的代码示例:
链表实现的队列
public class MyQueue { static class Node { public int val; public Node next; public Node(int val) { this.val = val; } } private Node head; private Node tail; public void offer(int value) { Node newNode = new Node(value); if (head == null) { head = newNode; tail = newNode; } else { newNode.next = head; tail = newNode; } } public Integer poll() { if (head == null) { return null; } Node removedNode = head; head = head.next; return removedNode.val; } public Integer peek() { if (head == null) { return null; } return head.val; }}
数组实现的队列
public class MyQueue2 { private int[] array = new int[100]; private int head = 0; private int tail = 0; private int size = 0; public boolean offer(int value) { if (size >= array.length) { return false; } array[tail] = value; tail++; if (tail >= array.length) { tail = 0; } size++; return true; } public Integer poll() { if (size <= 0) { return null; } int ret = array[head]; head++; if (head >= array.length) { head = 0; } size--; return ret; } public Integer peek() { if (size <= 0) { return null; } return array[head]; }}
栈与队列的使用示例
以下是使用Java库中的Stack
和Queue
实现栈和队列的示例代码:
栈示例
import java.util.Stack;public class StackExample { public static void main(String[] args) { Stackstack = new Stack<>(); stack.push('g'); stack.push('o'); stack.push('o'); stack.push('d'); while (!stack.empty()) { System.out.println(stack.pop()); } }}
队列示例
import java.util.LinkedList;public class QueueExample { public static void main(String[] args) { LinkedListqueue = new LinkedList<>(); queue.offer("aaa"); queue.offer("bbb"); queue.offer("ccc"); while (!queue.isEmpty()) { System.out.println(queue.poll()); } }}
通过以上内容,可以清晰地了解栈和队列的概念、实现方式以及实际使用示例。
发表评论
最新留言
不错!
[***.144.177.141]2025年03月25日 21时14分55秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C++邻接表存储图的深度优先搜索
2019-03-04
C++实现Dijkstra算法(单源路径最短算法)
2019-03-04
Dijkstra算法的总结
2019-03-04
前后端通信问题 —— SpringBoot+LayUI
2019-03-04
ubuntu中安装scikit-learn
2019-03-04
Ubuntu2004 向日葵安装笔记
2019-03-04
C/C++ new和delete使用注意事项
2019-03-04
Jmeter (一) ----环境搭建
2019-03-04
性能调优优化思路
2019-03-04
CodeBase(四)项目总结
2019-03-04
【ACM】HDU 5640 King‘s Cake
2019-03-04
java集合框架
2019-03-04
面向对象的三大特征
2019-03-04
SpringCloud和SprinBoot之间的关系
2019-03-04
奇怪的小东西
2019-03-04
剑指offer打卡Day14:数组中只出现一次的数字
2019-03-04
使用VSCode配合keil来编写Cortex-M程序
2019-03-04
电磁兼容的PCB设计(二)
2019-03-04
i.mx rt系列遇害笔记-----systick被gpio害了
2019-03-04
工资核算
2019-03-04