數據結構-棧結構實現(java)

import java.util.Scanner;

/**

* 棧結構

*/

public class StackStructure {

public static void main(String[] args){

StackType st = new StackType() ;

DataStack data1 = new DataStack() ;

//初始化棧

StackType stack = st.STInit() ;

Scanner input = new Scanner(System.in) ;

System.out.print("入棧操作:\n");

System.out.println("輸入姓名 年齡 進行入棧操作:");

do{

DataStack data = new DataStack() ;

data.name = input.next() ;

if(data.name.equals("0")){

break ; //若輸入 0,則退出

}else{

data.age = input.nextInt() ;

st.PushST(stack ,data) ;

}

}while(true) ;

String temp = "1" ;

System.out.println("出棧操作:按任意非 0 鍵進行出棧操作:");

temp = input.next() ;

while(!temp.equals("0")){

data1 = st.PopST(stack);

System.out.printf("出棧的數據是(%s ,%d)\n" ,data1.name ,data1.age) ;

temp = input.next() ;

}

System.out.println("測試結束!");

//釋放棧所佔用的空間

st.STFree(st);

}

}

/**

* 類型

*/

class DataStack{

String name ;

int age ;

}

/**

* 棧結構

*/

class StackType{

static final int MAXLEN = 50 ;

DataStack[] data = new DataStack[MAXLEN + 1] ; //數據元素

int top ;

StackType STInit(){

StackType p ;

//申請棧內存

if((p = new StackType()) != null){

//設置棧頂為 0

p.top = 0 ;

//返回指向棧的引用

return p ;

}

return null ;

}

//判斷棧是否為空

boolean SLIsEmpty(StackType s){

boolean t ;

t = (s.top == 0) ;

return t ;

}

//判斷棧是否已滿

boolean STIsFull(StackType s){

boolean t ;

t = (s.top == MAXLEN) ;

return t ;

}

//清空棧

void STClear(StackType s){

s.top = 0 ;

}

//釋放棧所佔用空間

void STFree(StackType s){

if(s != null){

s = null ;

}

}

//入棧

int PushST(StackType s ,DataStack data){

if((s.top+1) > MAXLEN){

System.out.print("棧溢出!\n");

return 0 ;

}

//將元素入棧

s.data[++ s.top] = data ;

return 1 ;

}

//出棧

DataStack PopST(StackType s){

if(s.top == 0){

System.out.print("棧為空!\n");

System.exit(0);

}

return (s.data[s.top --]) ;

}

//讀棧頂數據

DataStack PeekST(StackType s){

if(s.top == 0){

System.out.printf("棧為空!\n");

System.exit(0);

}

return (s.data[s.top]) ;

}

}


分享到:


相關文章: