单链表实现栈
来源:互联网 发布:薛之谦淘宝店铺地址 编辑:程序博客网 时间:2024/06/15 21:10
这个例子是课本上的一道习题,要求用单链表高效实现栈数据结构,并且不能使用头、尾节点。
1.先来谈谈比较艰难的一个思路
链表存储一个当前节点,当实现压入方法时,先判断当前节点是否存在,若为空则直接赋值,不为空,则添加到当前节点的next节点,并将当前节点转移到next节点。
链表同时存储根节点,当实现弹出方法时,采用遍历找到最后节点的pre节点,以删除最后节点,这样弹出方法需遍历,效率不高。
2.由于栈数据结构的特性,最主要要关注弹出、压入端的高效实现,接下来考虑如下算法
链表存储一个当前节点,当实现压入方法时,将压入节点的next链与当前节点相连,并将当前节点转移到压入节点。
当实现弹出方法时,获取当前节点的next节点作为当前节点,并将之前的当前节点弹出,此方法不需遍历,只消耗常数时间。
3.代码实现如下
/** * 单链表实现栈数据结构 * @author swing * */public class SLStack {private Node curr;//当前节点private int size;//栈大小/** * 压入 * @param data 压入节点值 * @return 压入节点值 */public int push(int data){//1.先包装节点Node node = new Node(data);//2.如果当前节点为空,直接赋值。否则赋值给当前节点的next链并转移当前节点if(curr == null){curr = node;}else{node.setNext(curr);curr = node;}//3.增加栈大小size++;return data;}/** * 弹出 * @return 弹出节点值 */public int pop(){//1.栈大小至少为1时可进行弹出操作if(size > 0){//2.将当前节点缓存Node temp = curr;//3.获取当前节点的next链作为新的当前节点curr = curr.getNext();//3.栈大小减少size--;return temp.getData();}else{throw new IndexOutOfBoundsException("空栈");}}/** * 栈大小 * @return 栈大小 */public int size(){return size;}}
0 0
- 单链表实现一个栈
- 单链表实现栈
- 单链表实现栈
- java 单链表实现栈
- 利用单链表实现栈
- 单链表实现栈
- 数据结构栈--单链表实现
- 单链表实现队列 栈
- 数据结构-单链表实现栈
- 面试题----单链表实现栈
- 使用单链表实现链栈
- C语言单链表实现栈
- 实现单链表、栈、队列功能
- 运用单链表实现链栈,并实现括号匹配---作业
- 单链表实现
- 单链表实现
- 单链表实现!
- 单链表实现
- Java并发编程——Condition接口
- notepad++ 怎么给单行字体设置格式颜色
- Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用注意点
- POJ 2081 Recaman's Sequence G++ 散列表的范围是博友求出来的
- 每天一个Linux命令(17):whereis
- 单链表实现栈
- Android数据存储和访问之SharedPreferences存储方式_用户登录记住密码案例
- Lintcode14 First Position of Target Solution 题解
- css3中的新特性经典应用
- 20170408_OSI参考模型与TCP/IP模型与输入URL地址按下enter键以后发生了什么?
- leetcode解题之 77. Combinations&78. Subsets&90. Subsets II java 版(求所有子集)
- 资源列表
- MySQL for Mac在Mac终端导入导出.sql文件
- C++虚函数