JAVA顺序栈操作——初始化、入栈、出栈、判断空栈、判断栈满
顺序栈:使用一组连续的内存依次保存栈中的数据,定义一个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]); } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。