当前位置:   article > 正文

Java基于链表的栈的实现_java链表实现栈

java链表实现栈

1、什么是栈
栈(Stack)是一种线性存储结构,它具有如下特点:
(1)栈中的数据元素遵守”先进后出”(First In Last Out)的原则,简称FILO结构。
(2)限定只能在栈顶进行插入和删除操作。

2、栈的基本操作
栈主要有以下几种基本操作:

(1)empty(): 如果栈为空返回true,否则返回false;
(2)size(): 返回栈内元素的大小;
(3)push(): 向栈内压入一个成员;
(4)pop(): 从栈顶弹出一个成员;

3、具体代码(我们使用链表来完成基本操作,并且使用java迭代器的功能)

  1. package cn.itcast.algorithm.stack;
  2. import java.util.Iterator;
  3. public class Stack<T> implements Iterable<T>{
  4. //首结点
  5. private Node head;
  6. //栈中元素的个数
  7. private int N;
  8. public class Node{
  9. T data;
  10. Node next;
  11. public Node(T data,Node next){
  12. this.data=data;
  13. this.next=next;
  14. }
  15. }
  16. //构造方法
  17. public Stack(){
  18. this.head=new Node(null,null);
  19. this.N=0;
  20. }
  21. //判断当前栈的元素个数是否为0
  22. public boolean isEmpty(){
  23. return N==0;
  24. }
  25. //获取栈中元素个数
  26. public int size(){
  27. return N;
  28. }
  29. //把t元素压入栈(相当于链表的头插法)
  30. public void push(T t){
  31. //首结点指向的第一个元素
  32. Node first=head.next;
  33. Node newNode = new Node(t, null);
  34. //首结点指向新结点
  35. head.next=newNode;
  36. //新结点指向原来的第一节点first
  37. newNode.next=first;
  38. //元素个数加1
  39. N++;
  40. }
  41. //把元素弹出栈
  42. public T pop(){
  43. //找到首结点的下一个结点
  44. Node first=head.next;
  45. if(first==null){
  46. return null;
  47. }
  48. head.next=first.next;
  49. //元素个数-1
  50. N--;
  51. return first.data;
  52. }
  53. @Override
  54. public Iterator<T> iterator() {
  55. return new SIterator();
  56. }
  57. private class SIterator implements Iterator{
  58. private Node n;
  59. public SIterator(){
  60. this.n=head;
  61. }
  62. @Override
  63. public boolean hasNext() {
  64. return n.next!=null;
  65. }
  66. @Override
  67. public Object next() {
  68. n=n.next;
  69. return n.data;
  70. }
  71. }
  72. }

测试代码

  1. package cn.itcast.algorithm.stackTest;
  2. import cn.itcast.algorithm.stack.Stack;
  3. public class StackTest {
  4. public static void main(String[] args) {
  5. //创建栈对象
  6. Stack<String> stack=new Stack<>();
  7. //测试压栈
  8. stack.push("a");
  9. stack.push("b");
  10. stack.push("c");
  11. stack.push("d");
  12. for(String s:stack){
  13. System.out.println(s);
  14. }
  15. System.out.println("----------------");
  16. //测试出栈
  17. String s1=stack.pop();
  18. System.out.println("弹出元素:"+s1);
  19. System.out.println("剩余元素个数:"+stack.size());
  20. }
  21. }

测试结果

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/611861
推荐阅读
相关标签
  

闽ICP备14008679号