栈的定义以及不同的存储结构的AVA实现

来源:互联网 发布:vb时间触发事件 编辑:程序博客网 时间:2024/05/22 00:50

栈的定义:栈是限定插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top),另一端叫做栈底。对栈的基本操作有push(进栈)和pop(出栈),前者相当于插入,后者相当于删除最后进栈的元素。

  栈中的元素除了具有线性关系外,还具有先进后出的特性。

package data.Stack;import java.util.Stack;public interface MyStack<T> {/** * 判断栈是否为空     */   boolean isEmpty();   /**    * 清空栈    */   void clear();   /**    * 栈的长度    */   int length();   /**    * 数据入栈    */   void push(T data);   /**    * 数据出栈    */   T pop();}


一、栈的顺序存储结构及实现

   栈的顺序存储结构成为顺序栈。顺序栈本质上是顺序表的简化,唯一需要确定的是用数组的哪一端表示栈底。通常把数组中下标为0的一端作为栈底,同时附设指针top指示栈顶元素在数组中的位置。

package data.Stack;public class MyArrayStack<T> implements MyStack{    private  Object []object=new Object[16];    private int size=0;public void clear() {for(int i=0;i<size;i++){object[i]=null;}              size=0;}public boolean isEmpty() {return size==0;}public int length() {return size;}public T pop() {if(size==0){return null;}T temp=(T) object[size-1];object[--size]=null;return temp;}public void push(Object data) {// TODO Auto-generated method stubif(size==object.length){resize();}object[size++]=data;}/** * 数组扩容 */public void resize(){Object [] temp=new Object[object.length*3/2+1];for(int i=0;i<size;i++){temp[i]=object[i];object[i]=null;}object=temp;}}

栈的链接存储结构及实现

1.链接的链接存储结构——链栈

 通常链栈有单链表示,因此其结点结构与单链表的结点构造相同。因为只能在栈顶执行插入和删除操作,显然以单链表的头部做栈顶是最方便的,而且没有必要像单链表那样为了运算方便附加一个头结点。

package data.Stack;public class MyLinkedStack<T> implements MyStack {/** * 将数据封装成结点 * @author zhouhai * */  private final class Node{private Node pre;private T data;  }  /**   * 栈顶指针   */  private Node top;  private int  size;//栈的长度  /**   * 无参构造函数   */   public  MyLinkedStack(){  top=null;  size=0;  }public void clear() {top=null;size=0;}public boolean isEmpty() {return size==0;}public int length() {return size;}public Object pop() {   if(size==0){   return null;   }   Node temp=top;   top=top.pre;   size--;   return temp;}public void push(Object data) {   Node node=new Node();   node.data=(T) data;   node.pre=top;   top=node;   size++;}}