数据结构(java语言描述)链栈的定义

1.定义栈接口

package stack;
public interface Istack {
    public void clear();
    public boolean isEmpty();
    public int length();
    public Object peek();
    public void push(Object x) throws Exception;
    public Object pop();
}

2.定义Node结点

package stack;

import class2.Node;

public class Node {
    private Object data;
    private Node next;
//无参构造函数
     public Node(){
        // this(null,null);
         this.data=null;
         this.next=null;
     }
     //带一个参数的构造函数
     public Node(Object data){
         //this(data,null); //效果同下
         this.data=data;
         this.next=null;
     }
     //带两个参数的构造函数
    public Node(Object data,Node next) {
    this.data=data;
    this.next=next;
    }
     //获取当前结点的数据
    public Object getData(){
        return data;
    }
    //获取当前结点的指针域
    public Node getNext(){
        return next;
    }
    //为当前结点赋值          
    public void setData(Object data){
        this.data=data;
    }
    //修改当前结点的指针域
    public void setNext(Node next){
        this.next=next;
    }
}

3.实现栈的接口,并定义链栈和方法

package stack;
public class Linkstack implements Istack{
        private Node top;//只需声明即可
        //清空链栈
        public void clear(){
            top=null;
        }
        //判断链栈是否为空
        public boolean isEmpty(){
            if(top==null)
                return true;
            else
                return false;
        }
        //计算链栈的长度,时间复杂度为O(n)
        public int length(){
            int i=0;
            while(top!=null){//与顺序栈不同,top指向链栈的栈顶元素
                i++;                     //顺序栈top指向栈顶元素的下一个top=0,指向栈顶元素则为-1
                top=top.getNext();
            }
            return i;
        }
        //返回链栈的栈顶元素
        public Object peek(){
            if(top!=null){
                return top.getData();
            }
            else{
                return null;
            }
        }
        //做链栈的入栈操作
        public void push(Object x) throws Exception{//先加入新结点,再移动top
            Node p=new Node(x);//先构造新结点
            p.setNext(top);//给结点设置下一个结点的索引
            p=top;//移动top
        }
        //做链栈的出栈操作
        public Object pop(){
            if(top!=null){
                Node p=top;//先取出结点,再移动top
                top=top.getNext();
                return p.getData();
            }
            else{
                return null;
            }
        }
}

时间: 2024-10-14 15:07:22

数据结构(java语言描述)链栈的定义的相关文章

数据结构(java语言描述)顺序栈的使用(两个大数相加)

利用http://www.cnblogs.com/xleer/p/5289661.html中对顺序栈以及栈的进本方法的定义,实现超过整数上限的两个数的加法计算. 算法: package stack;/********************************************************************** * @author sch ********利用栈,计算两个大数的和.大数的值超过int存储的范围******************************

数据结构(java语言描述)递归实现——汉诺塔问题

1.汉诺塔问题描述 N阶汉诺塔:假设有3个分别命名为x,y,z的三个塔座,在x上有n个盘子,直径大小不同,有小到大按标号1,2,3...n排列,要借助y将n个盘子转移到z上,期间不能让小盘子压在大盘子上.规则: 每次至移动一个盘子: 盘子可以插在x,y,z任意一个塔座上: 任何时候都不能将大盘压在小盘上. 2.解题思路 当n=1时,直接把盘子由x——>z; 当n>1时,需利用y,首先将(n-1)个盘子由x——>y,把第n个实现x——>z,然后把问题转换为实现(n-1)个盘子由y——

数据结构(java语言描述)哈夫曼编码

原理:哈夫曼编码是根据将已给出的权值作为叶子结点,生成一颗哈夫曼树,然后使得权重最小. 首先生成已给权重的所有的叶子结点,然后取所有节点中最小和次小的结点作为左右孩子生成一个哈夫曼树,计算出父节点的权重放入给出的权重森林中,并把之前的最小和次小的结点从森林中删除,再在种种森林中找最小和次小的结点生成权重树....直到最终只剩下一个树为止. 哈夫曼树的结点用如下结点表示: (有权重,左右孩子,父节点,然后设置一个标识符标志结点是否已经放入哈夫曼树) package tree;/**********

数据结构与问题求解-Java语言描述(第三版)

数据结构对程序的重要性不言而喻,用java语言来实现常见的一些数据结构,以及在相应数据结构上的操作对学习java的同学来说是必须掌握的. 本系列博文参考<数据结构与问题求解-Java语言描述(第三版)>来实现 在自己学习的过程中,更希望有机会与大家交流. PS :本人是菜鸟,只是用博客的方式激励自己.请轻喷.Fighting!

Java语言描述顺序表类,顺序表类的基本操作实现

数据结构(Java版)ch2 线性表的顺序存储(顺序表) 线性表的抽象数据Java接口描述如下: package ch2; /** * 线性表的抽象数据接口,用Java语言描述线性表的这些功能! * @author 房廷飞 * */ public interface IList { public void clear(); //将线型表置成空表 public boolean isEmpty(); //判断是不是空表 public int length(); //返回线性表的长度 public O

数据结构第八篇——链栈

?注:未经博主同意,不得转载. 链栈 链式存储的栈称为链栈.可用单链表来实现链栈,因此其节点结构与单链表的结构相同.下面给出这种结构的定义: 若要了解顺序栈的内容请跳转至http://www.cnblogs.com/tenjl-exv/p/7575549.html 链栈无栈满问题,空间可扩充,但有栈空问题,栈空的条件为top->next=NULL.插入与删除仅在栈顶处进行,链式栈的栈顶在链表头. 链栈的定义如下: 1 typedef int Data; 2 struct StackNode 3

设计模式之适配者模式——Java语言描述 | Amos H&#39;s blog

适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模糊属于结构性模式,它结合了两个独立接口的功能 概念阐述 使用适配器模式可以解决在软件系统中,将一些旧的类放入新环境中,但是新环境要求的接口旧的类不能满足的情况. 使用情形: 系统需要使用旧的类,但是此类的接口不符合系统的需要 需要建立一个可以重复使用的类,用于一些彼此之间没有太大关系的一些类 通过接口转换,将一个类插入到另一个类中 优点: 可以让任何两个没有关联的类一起运行 提高了类的复用 增加了类的透明度 灵活性好 缺点: 过多的使用

数据结构与算法经典问题解析 Java语言描述pdf

下载地址:网盘下载 内容简介 本书以Java为描述语言,介绍了数据结构与算法的基本知识.书中结合企业界的工程实践提炼教学内容,特别对数据结构中易混淆的问题进行了梳理,对每一个问题提出不同的解决方案.本书是一本优秀的数据结构方面的教材. 目录 译者序 前言 第1章绪论1 1.1变量1 1.2数据类型1 1.3数据结构2 1.4抽象数据类型2 1.5什么是算法3 1.6为什么需要算法分析3 1.7算法分析的目的3 1.8什么是运行时间分析4 1.9如何比较算法4 1.10什么是增长率4 1.11常用

【数据结构】之队列(Java语言描述)

在[这篇文章]中,我简单介绍了队列的基本数据结构及操作方式,并用C语言代码描述了队列的基本功能实现. JDK中默认为我们提供了队列的API-- Queue . Queue是一个接口,其中提供了处理队列及其操作的一些基本方法,如果我们想要创建自己的队列,就需要先创建一个类实现Queue接口. 在Java语言中也为我们提供了一些现成的Queue接口的实现类,如下: * @see java.util.Collection * @see LinkedList * @see PriorityQueue *