栈之链式存储结构链栈

链栈

栈的链式存储结构成为链栈。链栈是没有头结点,头结点就是栈顶指针top。

代码结构

package list;

  public interface Stackable;公共接口类

  public class Node;公共结点类

  class LinkedStack implements Stackable;实现栈接口的链栈类

  class TestLinkedStack;测试类

公共接口类

  1. package list;
  2.  
  3. public interface Stackable<T> {
  4.  
  5. public int Length();
  6.  
  7. public boolean isEmpty();
  8.  
  9. public boolean isFull();
  10.  
  11. public boolean Push(T element);
  12.  
  13. public T Pop();
  14.  
  15. }

公共结点类

  1. package list;
  2.  
  3. public class Node<T> {
  4. private T data;
  5. private Node<T> next;
  6.  
  7. Node() {
  8. this(null,null);
  9. }
  10.  
  11. Node(T data) {
  12. this(data,null);
  13. }
  14.  
  15. Node(T data, Node<T> next) {
  16. this.data = data;
  17. this.next = next;
  18. }
  19.  
  20. public void setData(T data) {
  21. this.data = data;
  22. }
  23.  
  24. public void setNext(Node<T> next) {
  25. this.next = next;
  26. }
  27.  
  28. public T getData() {
  29. return this.data;
  30. }
  31.  
  32. public Node<T> getNext() {
  33. return this.next;
  34. }
  35.  
  36. public String toString() {
  37. return getData();
  38. }
  39. }

实现栈接口的链栈类

  1. //链栈实现类,链栈没有头结点,当链栈为空表时,top = null;
  2. class LinkedStack<T> implements Stackable<T> {
  3. private Node<T> top;
  4.  
  5. LinkedStack() {
  6. this(null);
  7. }
  8.  
  9. //建链栈,element非空引用时,建带top的链栈
  10. LinkedStack(T element) {
  11. if(element != null) {
  12. top = new Node<T>(element);
  13. }
  14. }
  15.  
  16. //获取链栈,长度
  17. public int Length() {
  18. if(top == null) {return 0;}
  19. else {
  20. int k = 0;
  21. Node<T> temp = top;
  22. while(temp != null) {
  23. k++;
  24. temp = temp.getNext();
  25. }
  26. return k;
  27. }
  28. }
  29.  
  30. //当top==null时,是空栈
  31. public boolean isEmpty() {
  32. return top == null;
  33. }
  34.  
  35. //链栈没有满栈的概念
  36. public boolean isFull() {return false;}
  37.  
  38. //压栈
  39. public boolean Push(T element) {
  40. if(element == null) return false;
  41. Node<T> node = new Node<T>(element);
  42. node.setNext(top);
  43. top = node;
  44. return true;
  45. }
  46.  
  47. //弹栈
  48. public T Pop() {
  49. if(isEmpty()) return null;
  50. T temp = top.getData();
  51. top = top.getNext();
  52. return temp;
  53. }
  54.  
  55. //重写父类toString方法
  56. public String toString() {
  57. if(isEmpty()) return "[ ]";
  58. int len = Length();
  59. Node<T> temp = top;
  60. StringBuffer sb = new StringBuffer("[ ");
  61. while(temp != null) {
  62. sb.append(temp.getData()+" ");
  63. temp = temp.getNext();
  64. }
  65. sb.append("]");
  66. return sb.toString();
  67. }
  68. }

测试类

  1. //*****************************************************************
  2. //*栈之链式存储结构链栈-JAVA实现
  3. //*@author Nora-Xie
  4. //*@time 2013-10-06PM16:20
  5. //*****************************************************************
  6. package list;
  7.  
  8. import list.Node;
  9.  
  10. public class TestLinkedStack {
  11. public static void main(String[] args) {
  12. Stackable<String> stack = new LinkedStack<String>("A");
  13. System.out.println(stack.Length());
  14. System.out.println(stack);
  15. stack.Push("B");
  16. stack.Push("C");
  17. System.out.println(stack.Length()+" "+stack);
  18. stack.Pop();
  19. System.out.println(stack.Length()+" "+stack);
  20. }
  21. }

链栈和顺序栈对比

顺序栈和链栈的插入、删除操作时间复杂度都是O(1);

顺序栈需要事先确定数组的长度,有可能存在浪费内存空间的情况;

链栈虽然不需要事先确定表长,但因为需要存储链式指针,同时加大了内存开销;

因此,如果数据元素变化不可预测,时大时小,最好使用链栈;如果它的变化空间在可控范围内,则可以考虑使用顺序栈。

java与数据结构(6)---java实现链栈的更多相关文章

  1. 【C#】【数据结构】006-栈:链栈

    C#数据结构:链栈 1.自定义链栈结构: 链栈节点类 using System.Collections; using System.Collections.Generic; using UnityEn ...

  2. 数据结构(C++)——链栈

    结点结构 typedef char ElemType; typedef struct LkStackNode{ ElemType data; LkStackNode *next; }*Stack,SN ...

  3. java与数据结构(8)---java实现链队列

    链队列 实际上就是单链表,只是规定了删除在队头进行,添加在队尾进行. 链队列代码结构 package list.queue; public interface Queuable<T>; p ...

  4. java与数据结构(4)---java实现双向循环链表

    线性表之链式存储结构双向循环链表 双向循环链表:每个结点包含了数据.直接前驱地址指针和直接后驱地址指针,头结点的直接前驱指向尾结点,尾结点的直接后驱指向头结点,头尾相连构成一个可正可反的圆环.可以形象 ...

  5. java与数据结构(3)---java实现循环链表

    循环链表:将单链表中尾结点的指针由空指针改为指向头结点,就使整个单链表形成一个环,这种首尾相接的单链表称为单链表循环表,即循环链表. 循环链表与单链表最重要的区别是:尾结点的指针,不再是p->n ...

  6. java与数据结构(2)---java实现静态链表

    结点类 1 //结点类 2 class Node<T> { 3 private T data; 4 private int cursor; 5 6 Node(T data, int cur ...

  7. 数据结构——Java实现链栈

    一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 链栈是指采用链式存储结构实现的 ...

  8. java使用链栈实现迷宫求解

    java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html java实现链栈的代码: package stackapplicatio ...

  9. java使用链栈实现数制转换

    java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html 将前面java实现链栈的代码稍作修改: package linkedst ...

随机推荐

  1. udp协议基础(转自疯狂java讲义)

    第17章  网络编程 17.4  基于UDP协议的网络编程 UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发 ...

  2. Android(java)学习笔记257:JNI之helloword案例(利用NDK工具)

    1.逻辑思路过程图: 2.下面通过一个HelloWorld案例来说明一下JNI利用NDK开发过程(步骤) 分析:我们在Win7系统下编译的C语言代码,我们知道C语言依赖操作系统,不能跨平台,所以我们要 ...

  3. yii console.php 报错 Property "CConsoleApplication.theme" is not defined.

    默认配置的话,是不会出现这个错误的,应该是有人为修改了 yiic.php 这个文件,本来是 $config 载入的应该是 console.php ,人为修改后载入了 main.php 这个配置文件了 ...

  4. hdu 2104

    #include <iostream> using namespace std; int gcd(int a,int b) { return (b?gcd(b,a%b):a); } int ...

  5. C#判断程序是否以管理员身份运行,否则以管理员身份重新打开

    /// <summary> /// 判断程序是否是以管理员身份运行. /// </summary> public static bool IsRunAsAdmin() { Wi ...

  6. Jquery插件 easyUI属性汇总

    属性分为CSS片段和JS片段. CSS类定义:1.div easyui-window        生成一个window窗口样式.      属性如下:                   1)mod ...

  7. 用css3实现闪烁效果

    1. css3 @keyframes 参考 css3 @keyframes规则. 特别注意浏览器支持: Internet Explorer 10, Firefox, 和 Opera 支持 @keyfr ...

  8. oracle单行函数之数字函数

    round--四舍五入函数 trunc--截断函数 mod--求余函数 round和trunc除了可以操作数字外还可以操作日期. Demo SQL),),),),) from dual ; ) ) ) ...

  9. html5 js跨域

    介绍 当我们使用XMLHttpRequest发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理,如果确定接受请求则在返回结果中加入一个响应头:Acce ...

  10. 2016最新一元云购完整源码 云购CMS系统 带安卓和ios手机客户端 源码免费分享

    原文转自:http://www.zccode.com/thread-724-1-1.html 该资源说明: 看起来不错的一套一元云购CMS源码,源码包里面带了安卓和ios手机客户端,手机客户端需要自己 ...