写在前面:
栈是一种受限的线性表,在数据结构中也很常见。
下面,时光采用漫画的形式来说一说这个栈。
栈是一种受限线性表,也就是说,栈元素具有线性关系,即前驱后继关系;
只不过它是 一种特殊的线性表而已;
如图:
线性表是在表尾进行插入和删除操作,而在栈中表尾是指栈顶,而不是栈底;
栈的数据操作始终只在栈顶进行,即先进后出,后进先出;
顺序栈:
栈的顺序存储结构简称顺序栈;
利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素;
同时附设指针top指示栈顶元素在顺序表中的位置;
1,先写实体类SeqStack;
属性有栈的容量,结点数据以及栈的实际大小(即长度)
package com.java.model;
public class SeqStack { //动态数组的最大容量 public final static int Max_Size=1024; //栈的结点数据 public Object[] data; //栈的长度,用来标识数组中的元素个数 public int size; //构造函数 public SeqStack(Object[] data, int size) { this.data = data; this.size = size; } }
2,写栈的方法类SeqStackDao;
包括入栈、出栈、查看栈顶元素等等;
package com.java.dao;
import com.java.model.SeqStack; import static com.java.model.SeqStack.Max_Size; public class SeqStackDao { //初始化栈 public SeqStack Init_SeqStack(){ //动态数组初始化,加数组容量 Object[] data1=new Object[Max_Size]; //栈初始化,元素个数size为0 SeqStack stack=new SeqStack(data1,0); //数组赋值 for(int i=0;i<Max_Size;i++){ stack.data[i]=0; } return stack; } //入栈 public void Push_SeqStack(SeqStack stack,Object data){ if(stack==null){ return; } if(data==null){ return; } //如果栈容量小于或等于数组容量 if(stack.size==Max_Size){ return; } //元素入栈 stack.data[stack.size]=data; stack.size++; } //查找栈顶元素 public Object Top_SeqStack(SeqStack stack){ if(stack==null){ return null; } //若栈元素为0,则返回null if(stack.size==0){ return null; } //栈顶元素,注意数组下标从0开始,所以要减1 Object o=stack.data[stack.size-1]; return o; } //出栈操作 public void Pop_SeqStack(SeqStack stack){ if(stack==null){ return; } if(stack.size==0){ return; } //出栈 stack.size--; } //判断是否为空 public boolean IsEmpty(SeqStack stack){ if(stack==null){ return false; } if(stack.size==0){ return true; } return false; } //返回栈中元素的个数 public int Size_SeqStack(SeqStack stack){ return stack.size; } //清空栈 public void Clear_SeqStack(SeqStack stack){ if(stack==null){ return; } for(int i=0;i<stack.size;i++)