博客
关于我
Java~分别用顺序表和链表实现栈和队列,以及库的栈和队列的使用
阅读量:345 次
发布时间:2019-03-04

本文共 4102 字,大约阅读时间需要 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库中的StackQueue实现栈和队列的示例代码:

栈示例

import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack
stack = 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) {
LinkedList
queue = new LinkedList<>();
queue.offer("aaa");
queue.offer("bbb");
queue.offer("ccc");
while (!queue.isEmpty()) {
System.out.println(queue.poll());
}
}
}

通过以上内容,可以清晰地了解栈和队列的概念、实现方式以及实际使用示例。

转载地址:http://zjee.baihongyu.com/

你可能感兴趣的文章
Node.js官网无法正常访问时安装NodeJS的方法
查看>>
node.js模块、包
查看>>
node.js的express框架用法(一)
查看>>
Node.js的交互式解释器(REPL)
查看>>
Node.js的循环与异步问题
查看>>
Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
查看>>
nodejs + socket.io 同时使用http 和 https
查看>>
NodeJS @kubernetes/client-node连接到kubernetes集群的方法
查看>>
NodeJS API简介
查看>>
Nodejs express 获取url参数,post参数的三种方式
查看>>
nodejs http小爬虫
查看>>
nodejs libararies
查看>>
nodejs npm常用命令
查看>>
nodejs npm常用命令
查看>>
Nodejs process.nextTick() 使用详解
查看>>
NodeJS yarn 或 npm如何切换淘宝或国外镜像源
查看>>
nodejs 中间件理解
查看>>
nodejs 创建HTTP服务器详解
查看>>
nodejs 发起 GET 请求示例和 POST 请求示例
查看>>
NodeJS 导入导出模块的方法( 代码演示 )
查看>>