堆栈

来源:互联网 发布:华为手机删除数据恢复 编辑:程序博客网 时间:2024/05/20 21:43

栈结构:

栈结构是从运算来分类的,也就是说栈结构由特殊的运算规则,而从数据的逻辑结构来看,栈结构其实就是一种线性结构。

从存储结构来划分,栈可以有两种实现方式:

  • 顺序结构:用一维数组来实现,数组的0号位置是栈底,top位置是栈顶。
  • 链式结构:用链表实现,我感觉链表尾部为栈顶比较合适,但是资料上都认为链表头部是栈顶

栈的的特殊运算规则:在栈顶进行进栈,出栈操作,规则是“后进先出”



用java实现栈:
栈的成员变量:(用顺序结构实现)
public class Stack {int top;int length=50;int array[];}

栈的初始化:
public Stack(){top=-1;//初始栈顶位置,这时没有数据array=new int[length];//初始化实现数组}

空栈的判断:
public boolean isEmpty(){//判断是否是空栈if(top==-1) return true;else return false;}

满栈的判断:
public boolean isFull(){//判断是否满栈if(top==(length-1)) return true;else return false;} 

清空栈:
public void clearStack(){//清空栈top=-1;}

释放栈空间:
public void freeStack(){//释放栈空间array=null;}

压栈:
public int push(int data){//如果满栈则返回0,如果入栈成功则返回1if(isFull()) {System.out.println("已是满栈,push方法无法进行");return 0;}else {top++;array[top]=data;return 1;}}

出栈:
public int pop(){//如果已是空栈返回0,如果出栈返回出栈元素 if(isEmpty()) { System.out.println("这是空栈,pop操作无法进行"); return 0;} else{ int data=array[top]; top--; return data; }}

打印栈中的元素:
public void traversal(){if(isEmpty()){System.out.println("这是空栈");}else{for(int i=0;i<=top;i++){System.out.print(array[i]+" ");}System.out.println();}}


反思:栈结构实现起来相对容易,唯一需要注意的一点是初始化将top设置为了-1
原因:按照实现逻辑,栈首代表的是一个数据,但是如果初始设置为0,那么代表此时arry[0]的位置应该有数据,但是此时并无入栈数据,就会出现矛盾。









0 0
原创粉丝点击