首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java 兑现数据结构之栈

2012-10-26 
java 实现数据结构之栈在学数据结构课程时,对栈的最大特点是是后进先出(First In Last Out),对栈的操作主

java 实现数据结构之栈
   在学数据结构课程时,对栈的最大特点是是后进先出(First In Last Out),对栈的操作主要是入栈和出栈,判断栈是否为空,计算栈的大小。
   栈是一种数据结构,它代表只能在某一端进行插入、删除操作的特殊线性表。对栈而言,允许插入删除的一端是栈顶,另一端则称为栈底。
1.栈的顺序存储实现:


运行结果:
public class LinkStack<T>{//定义一个内部类Node,Node实例代表链栈的节点。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的值为nulltop = null;}//以指定数据元素来创建链栈,该链栈只有一个元素public LinkStack(T element){top = new Node(element , null);size++;}//返回链栈的长度public int length(){return size;}//进栈public void push(T element){//让top指向新创建的元素,新元素的next引用指向原来的栈顶元素top = new Node(element , top);size++;}//出栈    public T pop(){Node oldTop = top;//让top引用指向原栈顶元素的下一个元素top = top.next;//释放原栈顶元素的next引用oldTop.next = null;size--;return oldTop.data;}//访问栈顶元素,但不删除栈顶元素public T peek(){return top.data;}//判断链栈是否为空栈public boolean empty(){return size == 0;}//清空链栈public void clear(){//将底层数组所有元素赋为nulltop = null;size = 0;}public String toString(){//链栈为空链栈时if (empty()){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 - 2 , len).append("]").toString();}}}


java集合提供了两种栈供开发者使用:
java.util.Stack:一个普通的顺序栈,底层基于数组实现。这个Stack类是线程安全的。
java.util.LinkedList:是一个双向链表。线程不安全,可以当做栈来使用,提供了push(),pop(),peek()等方法。在多线程环境下使用,可以使用Collections类的工具方法将其改造成线程安全类。

热点排行