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

本文共 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库中的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/

你可能感兴趣的文章
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>
Mysql——深入浅出InnoDB底层原理
查看>>
MySQL“被动”性能优化汇总
查看>>
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>
MySQL与Informix数据库中的同义表创建:深入解析与比较
查看>>
mysql与mem_细说 MySQL 之 MEM_ROOT
查看>>
MySQL与Oracle的数据迁移注意事项,另附转换工具链接
查看>>
mysql丢失更新问题
查看>>