您的位置:首页 > 编程语言 > Java开发

JAVA顺序栈操作——初始化、入栈、出栈、判断空栈、判断栈满

2017-04-25 17:12 555 查看
顺序栈:使用一组连续的内存依次保存栈中的数据,定义一个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]);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAVA
相关文章推荐