已解决
深入理解数据结构(1)—用链表实现栈
来自网友在路上 151851提问 提问时间:2023-10-27 14:04:47阅读次数: 51
最佳答案 问答题库518位专家为你答疑解惑
栈是一种数据结构,链表也是一种数据结构。它们都是由基础的语法实现的。
如果一个数据结构可以用另外的数据结构来实现,那么可以有力的证明——“数据结构是一种思想”,是一种讲语法组合起来实现某种功能的手段
一、栈的特点——要实现哪些功能?
既然要用链表来模拟栈,那么要实现哪些功能?
- 栈是一种特殊的线性表,只允许在固定一端进行插入和删除元素操作
- 后进先出
那么对于这两个特性,我们可以做出如下设想:
在使用单链表的情况下,从头部插入——模拟入栈,头部删除——模拟出栈。同时这样操作满足了时间复杂度O(1)
每次向栈中插入一个元素,就是向这个链表前端插入一个新的“head”;
每次从栈中弹出一个元素,就是从链表头部删除一个“head”,然后“head = head.next”;
二、代码实现
public class MyStack {/*创建链表的节点*/static class Node{public int val;public Node next;public Node(int val){this.val = val;}}public Node head;public int size;//实现入栈方法public void push(int val){Node node = new Node(val);/*如果此时链表中没有节点,那么将node设为head,并将有效元素个数size加1* 如果链表中已经有元素的话,将node节点头插到head节点前,并设为head*/if (size == 0){head = node;}else {node.next = head;head = node;}size++;}//实现出栈方法/*返回当前头节点的值,并将头节点后移*/public int pop(){int h = head.val;head = head.next;size--;return h;}//获取栈顶元素的peek方法public int peek(){return head.val;}//判断栈是否为空public boolean empty(){return size == 0;}public static void main(String[] args) {MyStack stack = new MyStack();stack.push(12);stack.push(24);stack.push(26);stack.push(58);int b = stack.pop();int a = stack.peek();System.out.println(b);System.out.println(a);}
}
查看全文
99%的人还看了
相似问题
- 〖大前端 - 基础入门三大核心之JS篇㊲〗- DOM改变元素节点的css样式、HTML属性
- Java 算法篇-链表的经典算法:判断回文链表、判断环链表与寻找环入口节点(“龟兔赛跑“算法实现)
- 代码随想录二刷 | 链表 | 删除链表的倒数第N个节点
- 节点导纳矩阵
- bhosts 显示节点 “unreach“ 状态
- 电子电器架构 —— 车载网关边缘节点总线转换
- 〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点
- 第四天||24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II
- CS224W5.1——消息传递和节点分类
- Vue报错解决Error in v-on handler: “Error: 无效的节点选择器:#div1“
猜你感兴趣
版权申明
本文"深入理解数据结构(1)—用链表实现栈":http://eshow365.cn/6-26090-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!