顺序栈:使用一组连续的内存依次保存栈中的数据,定义一个top变量来保存栈顶序号。
栈结构是“后进先出”的原则。
栈的最基本操作有两个:push(入栈) + pop(出栈)
import java.util.Scanner;
/**
* @author LilyLee
* @date 2017年4月25日
* @time 下午4:25:15
* @Version 1.0
* @email lilylee_1213@foxmail.com
*
*/
public class Mystack {
public static void main(String[] args) {
Stack_type st=new Stack_type();
Stack_Data data1=new Stack_Data();
Stack_type stack =st.STinit(); //初始化栈
Scanner sc=new Scanner(System.in);
System.out.println("input name age end with name='0'"); //输入栈元素,以0结束
while(true){
Stack_Data sdata=new Stack_Data();
sdata.name=sc.next();
if(sdata.name.equals("0")){break;}
sdata.age=sc.nextInt();
st.PushST(stack, sdata);
}
String flag="1";
System.out.println("pop stack end with 0");//输入任意非0元素完成弹栈
flag=sc.next();
while(!(flag.equals("0"))){
data1=st.PopST(stack);
if(data1==null){break;}
System.out.println(data1.name+" "+data1.age);
flag=sc.next();
}
System.out.println("End and Free");
st.STFree(st);
}
}
class Stack_Data{
String name;
int age;
}
class Stack_type{
static final int MAXLEN=50; //定义栈的最大长度
Stack_Data[] data=new Stack_Data[MAXLEN+1];
int top;
Stack_type STinit(){
Stack_type p;
if((p=new Stack_type())!=null){ //申请栈内存
p.top=0;
return p;
}
return null;
}
boolean STIsEmpty(Stack_type s){ //判断栈是否为空
boolean t;
t=(s.top==0);
return t;
}
boolean STIsFull(Stack_type s){ //判断栈是否已满
boolean t;
t=(s.top==MAXLEN);
return t;
}
void STClear(Stack_type s){ //清空栈
s.top=0;
}
void STFree(Stack_type s){ //释放栈所占用空间
if(s!=null){
s=null;
}
}
int PushST(Stack_type s,Stack_Data data){
if((s.top+1)>MAXLEN){return 0;} //栈溢出
s.data[++s.top]=data;
return 1;
}
Stack_Data PopST(Stack_type s){
if(s.top==0){System.out.println("no elements!"); return null;} //栈为空,操作失败
return (s.data[s.top--]);
}
Stack_Data PeekST(Stack_type s){
if(s.top==0){System.exit(0);} //栈为空,操作失败
return (s.data[s.top]);
}
}