是一种基于后进先出(LIFO)策略的集合类型。当邮件在桌上放成一叠时,就能用栈来表示。新邮件会放在最上面,当你要看邮件时,会一封一封从上到下阅读。栈的顶部称为栈顶,所有操作都在栈顶完成。

  前面提到的新邮件,就是在栈顶入栈(push),阅读的时候从栈顶取出一封就是出栈(pop)。就像下面这个图一样,你不能从最下面直接拿一封信出来。

 package ABAB;

 /**
* 链表实现栈
* @param <Item>
*/
public class Stack<Item> { private Node first;
private Integer N = 0; private class Node {
Item item;
Node next; public Node(Item i) {
this.item = i;
this.next = null;
}
} public boolean isEmpty() { return N == 0; } public int size() { return N; } /**
* 进栈
*
* @param i
*/
public void push(Item i) {
Node node = new Node(i);
if (first == null) {
first = node;
N++;
return;
}
Node oldFirst = first;
first = node;
first.next = oldFirst;
N++;
} /**
* 获取栈顶元素
*
* @return
*/
public Item peek() {
if (first == null)
return null;
return first.item;
} /**
* 出栈
*
* @return
*/
public Item pop() {
if (isEmpty())
return null;
Item item = first.item;
first = first.next;
N--;
return item;
} }

队列

  队列是一种基于先进先出(FIFO)策略的集合类型。例如排队上车,先排队的人可以先上车。

  队列的链表实现中有两个指针,一个指向队头,一个指向队尾。当有新的元素进入时,新元素被放在队尾。当要出队时,从队头弹出元素,并且将队头后移。

 package ABAB;

 /**
* 链表实现队列
* @param <Item>
*/
public class Queue<Item> { private Node first;
private Node last;
private int N = 0;
private class Node{
Item item;
Node next;
public Node(Item i){
this.item = i;
this.next = null;
}
} public boolean isEmpty(){return N == 0;};
public int size(){return N;} /**
* 入队
* @param item
*/
public void enqueue(Item item){
Node node = new Node(item);
Node oldLast = last;
last = node;
if(isEmpty())
first = last;
else
oldLast.next = last;
N++;
} /**
* 出队
* @return
*/
public Item dequeue(){
Item item;
if(isEmpty())
return null;
item = first.item;
first = first.next;
N--;
return item;
} /**
* 获取队首元素
* @return
*/
public Item peek(){
if(isEmpty())
return null;
return first.item;
} }

Java 用链表实现栈和队列的更多相关文章

  1. Java用链表实现栈和队列

    1.用链表实现栈 package stack; /** * * @author denghb * */ class Link { public long dData; public Link next ...

  2. java实现 数据结构:链表、 栈、 队列、优先级队列、哈希表

    java实现 数据结构:链表. 栈. 队列.优先级队列.哈希表   数据结构javavector工作importlist 最近在准备找工作的事情,就复习了一下java.翻了一下书和网上的教材,发现虽然 ...

  3. 数据结构 1 线性表详解 链表、 栈 、 队列 结合JAVA 详解

    前言 其实在学习数据结构之前,我也是从来都没了解过这门课,但是随着工作的慢慢深入,之前学习的东西实在是不够用,并且太皮毛了.太浅,只是懂得一些浅层的,我知道这个东西怎么用,但是要优化.或者是解析,就不 ...

  4. 链表、栈、队列、KMP相关知识点

    链表.栈与队列.kmp; 数组模拟单链表: 用的最多的是邻接表--就是多个单链表: 作用:存储树与图 需要明确相关定义: 为什么需要使用数组模拟链表 比使用结构体 或者类来说 速度更快 代码简洁 算法 ...

  5. 图解堆算法、链表、栈与队列(Mark)

    原文地址: 图解堆算法.链表.栈与队列(多图预警) 堆(heap),是一类特殊的数据结构的统称.它通常被看作一棵树的数组对象.在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间 ...

  6. [Python] 数据结构--实现顺序表、链表、栈和队列

    说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...

  7. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  8. Java数据结构和算法 - 栈和队列

    Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应 ...

  9. Java面试题:栈和队列的实现

    面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要 ...

随机推荐

  1. golang http get请求方式

    client := &http.Client{} //生成要访问的url,token是api鉴权,每个api访问方式不同,根据api调用文档拼接URLurl := fmt.Sprintf(&q ...

  2. codeforce 380(div.2)

    A B 略 C:二分,贪心 设d(i, v)为 剩余油量为v时,车开距离i 所需要的最小时间,使用线性规划不难算出: if v < i return INF; //无法到达 if v > ...

  3. SELECT command denied to user 'username'@'ip' for table 'user'错误处理

    错误信息 使用RDS for MySQL,程序执行查询SQL时报错如下: SELECT command denied to user 'username'@'ip' for table 'user' ...

  4. Spring Boot实战之单元测试

    Spring Boot实战之单元测试 本文介绍使用Spring测试框架提供的MockMvc对象,对Restful API进行单元测试 Spring测试框架提供MockMvc对象,可以在不需要客户端-服 ...

  5. tab选项卡平滑滚动vue

    <html lang="en"> <head> <meta charset="UTF-8"> <title>Ti ...

  6. springboot-aop日志打印

    package com.cinc.ecmp.client; import com.cinc.ecmp.enums.BackResultEnum; import com.cinc.ecmp.except ...

  7. dotnet 判断程序当前使用管理员运行降低权使用普通权限运行

    有一些程序是不想通过管理员权限运行的,因为在很多文件的读写,如果用了管理员权限程序写入的程序,其他普通权限的程序是无法直接访问的.本文告诉大家如何判断当前的程序是通过管理员权限运行,然后通过资源管理器 ...

  8. JSPs

    简介 Tomcat 8.0 使用 Jasper 2 JSP 引擎去实现 JavaServer Pages 2.3 规范. Jasper 2 经过了重新设计,极大改善了上一版 Jasper 的性能.除了 ...

  9. 开发当中curl简单使用

    curl是linux上可以发送http请求的命令.当然Postman是一个很好的接口调用管理工具,但在验证一个linux服务器调用另外一个linux服务器API是否可用的场景下,非curl命令莫属. ...

  10. TCP/IP Basic

    1.概述 TCP/IP起源于60年代美国政府遮住的一个分组交换网络项目,在当今被定义为互联网通信接口,TCP/IP主要分为4层,每一层负责不同的通信功能,这促成了一个协议族的诞生,而TCP/IP是一组 ...