//=================================================
// File Name : LinkStack_demo
//------------------------------------------------------------------------------
// Author : Common //类名:Link_long
//属性:
//方法:
class Link_long{ //链节点类
public long dData;
public Link_long next; //链表中下一个节点的引用 public Link_long(long dData) {
super();
this.dData = dData;
} public void displayLink(){ //显示当前节点的值
System.out.println("dData"+dData);
} } //类名:LinkList_long
//属性:
//方法:
class LinkList_long{
private Link_long first; //只需要第一个节点,从第一个节点出发即可定位所有节点 public LinkList_long() { //构造函数
this.first = null;
} public boolean isEmpty(){
return (first == null);
} public void insertFirst(long dd){ //插入元素是从链表的头开始插入
Link_long newLink = new Link_long(dd);
newLink.next = first;
first = newLink;
} public long deleteFirst(){ //删除temp.dData
Link_long temp = first; //暂存first
first = first.next; //把next设为first
return temp.dData; //返回原来的first
} public void displayList(){
System.out.println("List(first-->last):");
Link_long current = first; //用于不断改变位置实现遍历
while(current != null){
current.displayLink();
current = current.next;
}
} public Link_long find(int key){ //查找指定的关键字
Link_long current = first;
while(current.dData != key){
if(current.next == null)
return null;
else
current = current.next;
}
return current;
} public Link_long delete(int key){ //如果current的值匹配,则删除
Link_long current = first;
Link_long previous = first;
//没有匹配到值
while(current.dData != key){
if(current.next == null)
return null;
else{ //pre和cur向后移动
previous = current;
current = current.next;
}
}
//匹配到值
if(current == first) //只有一个first,并匹配,则把first设成first.next
first = first.next;
else //current的值匹配,则删除,并把cur的next赋给pre的next
previous.next = current.next;
return current;
}
} //类名:LinkList_long
//属性:
//方法:
class LinkStack{ //用链表实现栈,链表从First开始插入,新的元素将变成First,先删除后来元素 private LinkList_long theList; public LinkStack() { //构造函数
theList = new LinkList_long();
} public void push(long j){ //入栈,即在链表的First插入元素
theList.insertFirst(j);
} public long pop(){ //出栈,即删除链表的First元素
return theList.deleteFirst();
} public boolean isEmpty(){ //判断栈是否为空,即判断链表是否为空
return (theList.isEmpty());
} public void displayStack(){
System.out.println("Stack(top-->bottom):");
theList.displayList();
} } //主类
//Function : LinkStack_demo
public class LinkStack_demo { public static void main(String[] args) {
// TODO 自动生成的方法存根
LinkStack theStack = new LinkStack();
theStack.push(10);
theStack.push(20);
theStack.push(30);
theStack.displayStack(); theStack.pop();
theStack.pop();
theStack.displayStack();
} }

Java数据结构——用链表实现栈的更多相关文章

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

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

  2. JAVA数据结构之链表

    JAVA数据结构之链表 什么是链表呢? 链表作为最基本的数据结构之一,定义如下: 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 简单来说呢,链 ...

  3. 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现

      本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型   栈是 ...

  4. java数据结构与算法之栈(Stack)设计与实现

    本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是一种用于 ...

  5. Java数据结构和算法(一)--栈

    栈: 英文名stack,特点是只允许访问最后插入的那个元素,也就是LIFO(后进先出) jdk中的stack源码: public class Stack<E> extends Vector ...

  6. Java数据结构与算法(2):栈

    栈是一种线性表,特点在于它只能在一个位置上进行插入和删除,该位置是表的末端,叫做栈的顶(top).因此栈是后进先出的(FIFO).栈的基本操作有push.peek.pop. 栈的示意图 进栈和出栈都只 ...

  7. JAVA数据结构——单链表

    链表:一. 顺序存储结构虽然是一种很有用的存储结构,但是他有如下几点局限性:1. 因为创造线性表的时候已经固定了空间,所以当需要扩充空间时,就需要重新创建一个地址连续的更大的存储空间.并把原有的数据元 ...

  8. java实现单链表、栈、队列三种数据结构

    一.单链表 1.在我们数据结构中,单链表非常重要.它里面的数据元素是以结点为单位,每个结点是由数据元素的数据和下一个结点的地址组成,在java集合框架里面 LinkedList.HashMap(数组加 ...

  9. 数据结构之链表、栈和队列 java代码实现

    定义抽象节点类Node: package cn.wzbrilliant.datastructure; /** * 节点 * @author ice * */ public abstract class ...

随机推荐

  1. 2016年GitHub 排名前 100 的安卓、iOS项目简介(收藏)

    排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不相关的项目, 所以排名并不具备任何官方效力, 仅供参考学习, 方便初学者 ...

  2. 函数也是对象,本片介绍函数的属性、方法、Function()狗仔函数。

    1.arguments.length表示实参的个数. 2.arguments.callee.length表示形参个数. function test(a,b,c,d,e,f){ alert(argume ...

  3. nutch-2.1导入eclipse+mysql运行

    初次接触nutch,记录下来 首先数据库 CREATE DATABASE nutch DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_c ...

  4. js-form进行reset重置

    (需要注意:做这个reset和submit时页面不能有这两个id和名称) <form id="form1" name="formName" action= ...

  5. 常用免费的WebService列表

    天气预报Web服务,数据来源于中国气象局 Endpoint :     http://www.webxml.com.cn/WebServices/WeatherWebService.asmx Disc ...

  6. GridView多表关联

    有些时候,需要多表关联查询,使用SqlDataProvider比较灵活 Controller中 use yii\data\SqlDataProvider; $dataProvider = new Sq ...

  7. UML类图中的六种关系及实例【补充】

    ·继承和接口都比较常见,通过继承子类可以直接使用父类的(public,protected属性以及方法:而实现了Speakable接口的Person类必须定义其所有方法,包括speak()): ·依赖指 ...

  8. 面向对象_python

    面向对象_python 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定 ...

  9. Spark 编程基础

    1. 初始化Spark import org.apache.spark.{SparkContext, SparkConf} val conf=new SparkConf().setAppName(&q ...

  10. linux软件包的安装和卸载

    这里分两种情况讨论:二进制包和源代码包. 一.linux二进制分发软件包的安装和卸载 Linux软件的二进制分发是指事先已编译好二进制形式的软件包的发布形式,其长处是安装使用容易,缺点则是缺乏灵活性, ...