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]);
	}
	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值