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]);
}
}
栈结构是“后进先出”的原则。
栈的最基本操作有两个: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]);
}
}
相关文章推荐
- 【数据结构之旅】顺序栈的定义、初始化、空栈判断、入栈、出栈操作
- C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)
- 栈的顺序存储的初始化、判断栈空、入栈、出栈、读取栈顶元素、栈置空、求栈长操作
- 采用顺序存储实现栈的初始化、入栈、出栈操作。
- 顺序栈的相关操作(初始化、入栈、出栈)
- 栈的链式存储的定义、初始化、判断空、入栈、出栈、读取栈顶元素、求栈长度、清空栈操作
- 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现
- Java 用数组实现栈 (Stack),包括栈的初始化,入栈、出栈等操作
- 判断是否出栈的顺序满足入栈顺序-Java
- 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现 ——感想
- 数据结构顺序栈的创建、初始化、出栈、入栈及销毁
- 元素出栈、入栈顺序的合法性(判断一个字符串是否按照出栈顺序)
- 已知入栈顺序,判断某一序列是否为其合法出栈序列!
- Java_20_循环结构_While循环_Do-while循环(执行顺序:初始化、布尔表达式条件判断、循环体、迭代)
- 链栈:初始化、判断栈空、入栈、出栈、获取栈顶元素等
- 链栈的定义、初始化、出栈、入栈等操作
- 判断元素出栈、入栈顺序的合法性。如:入栈的序列( 1,2,3,4,5 ),出栈序列为 ( 4,5,3,2,1 )是合法序列,入栈的序列( 1,2,3,4,5 ),出栈序列为( 1,5,3,2,4 )是
- 顺序栈和链式栈的结构及其基本操作(置空,获取栈顶元素,入栈,出栈)
- 数据结构栈的数组实现初始化,入栈,出栈,获取栈顶元素,栈的长度等操作
- 根据入栈顺序输出所有可能的出栈顺序 (Java)