• 栈的基本操作


    目录

    一、什么是栈?

     二、用单链表实现栈

     三、用顺序表数组实现栈


    一、什么是栈?

    ·栈(stack)是一个先进后出(FILO-First In Last Out)的有序列表

    ·主要方法:入栈(push)、出栈(pop)

    ·允许插入和删除的一端为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。

    ·先放入到栈的元素在栈底,后放入栈的元素为栈顶。栈顶的元素先出,栈底的元素后出。

    ·栈的应用场景:(1)递归问题的处理(2)表达式的转换,例如括号、计算器。(3)二叉树的遍历(4)图的深度优先遍历

     二、用单链表实现栈

    思路:用链表的方式实现栈
    将插入的结点插入到第一个结点位置,如果插入到链表的尾部的话,虽然插入尾部可以后进先出,但每次拿到元素都要遍历到链表的尾部,效率太低了,所以将结点插入到链表头部,每次从链表头部获取结点,达到后进先出的效果。 

     代码实现:

    1. package Stack;
    2. public class MyLinkedStack {
    3. //定义链表结点
    4. public class Node{
    5. T item;//存储数据
    6. Node next;
    7. public Node(T item, Node node) {
    8. this.item = item;
    9. this.next = node;
    10. }
    11. }
    12. //定义头结点
    13. Node head;
    14. //定义栈的长度
    15. int size;
    16. //初始化头结点、栈的长度
    17. public MyLinkedStack() {
    18. head = new Node(null,null);
    19. size = 0;
    20. }
    21. //定义入栈方法
    22. //思路:用链表的方式实现栈
    23. // 将插入的结点插入到第一个结点位置,如果插入到链表的尾部的话,
    24. // 虽然插入尾部可以后进先出,但每次拿到元素都要遍历到链表的尾部,
    25. // 效率太低了,所以将结点插入到链表头部,每次从链表头部获取结点,达到后进先出的效果。
    26. public void push(T t){
    27. //获取第一个结点
    28. Node first = this.head.next;
    29. //创建插入的结点
    30. Node node = new Node(t,null);
    31. //将需要插入的结点指针指向第一个结点
    32. node.next = first;
    33. //将头结点指针指向插入的结点
    34. this.head.next = node;
    35. //链表的长度加一
    36. this.size++;
    37. }
    38. //定义出栈方法
    39. public T pop(){
    40. //获取第一个结点
    41. Node first = this.head.next;
    42. //获取第二个节点
    43. Node second = first.next;
    44. //取出第一个结点,将头结点指向第二个节点
    45. this.head.next = second;
    46. //链表的长度减一
    47. this.size--;
    48. //return获取结点
    49. return first.item;
    50. }
    51. }

     三、用顺序表数组实现栈

     这里讲一下思路即可,代码实现先不贴上去哈。

    思路:数组实现的原理很简单,每次插入元素都放在数组的尾部,每次获取元素也从数组尾部获取即可。

  • 相关阅读:
    增强group by的使用
    JavaEE、Spring
    数据结构与算法:树 赫夫曼树(一) (五)
    中年帕金森:守护健康,从容面对生活挑战
    顺序表<数据结构 C 版>
    SpringCloud 08 Feign 负载均衡和服务熔断
    表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
    XSKY 文件存储首次进入 IDC 榜单
    Autodesk_Revit2022安装图文教程_Revit2022建筑信息模型BIM软件图文教程
    java for语法
  • 原文地址:https://blog.csdn.net/m0_51697147/article/details/127999859