栈---链式栈的实现
来源:互联网 发布:windows网络命令 编辑:程序博客网 时间:2024/05/16 12:52
一、
(1)栈是在一种特殊的线性表,它代表只能在某一端进行插入、删除操作,通常在线性表的尾端进行插入、删除操作.
(2)对于栈而言,通常允许插入、删除操作的一端被称为栈顶(top),另一端被称为栈底(buttom).
(3)从栈顶压入元素称为进栈(push).
(4)从栈顶删除元素称为出栈(pop).
栈是一种先进后出的线性表.
二、
可以采用单链表来保存栈中的所有元素,这种结构的栈被称为链栈。
对于链栈而言,栈顶元素不断改变,程序只要使用一个top引用来记录当前的栈顶元素即可。top引用变量永远引用栈顶元素,再使用一个size变量来记录当前栈内元素个数。
(1)进栈
1)让top引用指向新添加的节点,新节点的next指向原来的栈顶;
2)记录栈内元素个数的变量+1;
(2)出栈
1)让top指向原来栈顶的下一个节点;
2)释放原来栈顶的next引用;
3)让记录栈内元素个数的变量-1;
public class LinkStack<T>{//定义节点类 private class Node { private T data; private Node next;public Node() { } public Node(T data,Node next) { this.data = data; this.next = next; } } private Node top; private int size; public LinkStack()//链栈的无参构造器 { top = null; } public LinkStack(T element) { top = new Node(element,null); size++; } public int length()//返回链栈的长度 { return size; } //进栈 public void push(T element) { top = new Node(element,top);//让top 指向压入的新节点 size++; } //出栈 public T pop() { Node oldTop = top;//让oldTop指向要出栈的栈顶节点 top = top.next;//top指向原来栈顶的下一个节点 oldTop.next = null;//释放原栈顶的next的引用 size--; return oldTop.data; } //访问栈顶元素 public T peek() { return top.data; } //判断栈是否为空 public boolean isEmpty() { return size == 0; } //清空栈 public void clear() { top = null; size = 0; } public String toString() { if(isEmpty()) { return "[]"; } else { StringBuilder sb = new StringBuilder("["); for (Node current =top; current != null; current = current.next){sb.append(current.data.toString()+",");} int len = sb.length();return sb.delete(len-1,len).append("]").toString(); } }测试
public class LinkStackTest{ public static void main(String[] args){LinkStack<String> linkstack = new LinkStack<String>();linkstack.push("hello");linkstack.push("world");linkstack.push("111");System.out.println(linkstack);System.out.println(linkstack.peek());linkstack.pop();System.out.println(linkstack);linkstack.clear();System.out.println(linkstack);}}
结果:
[111,world,hello]
111
[world,hello]
[]
0 0
- 栈的链式实现
- 链式栈的实现
- 栈的链式实现
- 链式栈的实现
- 链式栈的实现
- 链式栈的实现
- 链式栈的实现
- 链式栈的实现
- 栈的链式实现
- 栈的实现(链式)
- 链式栈的实现
- 链式栈的实现
- 链式栈的实现
- 链式栈的实现
- 栈的链式实现
- 栈的实现:链式栈
- 栈---链式栈的实现
- 栈的链式实现形式
- Java内存分配策略
- 怎么用c语言实现读取一个txt文件里的数据 要按行读出来
- 外置式与增量式PID模板程序(51单片机c语言)
- Cassandra 入门
- Android事件处理分发机制的总结:一(事件处理)
- 栈---链式栈的实现
- Nginx代理无法获取真实ip地址解决方法
- rides介绍和安装
- AngularJS 模块服务 珠联璧合
- C++ 析构函数与构造函数 学习笔记1
- 切换语言为德语时,长按power键看到的提示信息显示不完整
- 面向对象的设计模式
- cocos2d-x 两点缩放
- Qt Focus事件处理及eventFilter的用法