首页 > 代码库 > 闭关修炼中 *** Java常用算法之 -- 栈结构

闭关修炼中 *** Java常用算法之 -- 栈结构

    

     什么是栈结构:

       栈结构从数据的运算来分类,栈结构具有特殊的运算规则。

       从数据的逻辑结构来看,栈结构其实就是一种线性结构

       but!!!

       从数据的存储结构来划分,栈结构分为两类:

         顺序表结构:即用一组地址连续的内存单元依次保存栈中的数据。在程序中,可以定义一个

               指定大小的结构数组来作为栈,序号为0的元素就是栈底,在定义一个top保

               存栈顶的序号。

         链式栈结构:即使用链式形式保存栈中各元素的值。链表首部(head引用所指向元素)为栈顶,

               链表尾部(指向地址为null)为栈底。

 

     栈结构遵循:后进先出(Last In Firt Out, LIFO)的原则处理结点数据。  举例:仓库中货物,后进先出

     栈结构(只有栈顶是可以访问的)的两个基本操作:

         入栈(Push):将数据保存到栈顶的操作。 进行入栈操作前,先修改栈顶引用,使其向上移一个

               元素位置,然后将数据保存到栈顶引用所指的位置。

         出栈(Pop):将栈顶的数据弹出的操作。 通过修改栈顶引用,使其指向栈中的下一个元素。

 

  附上一个栈结构的实例代码(看着代码感觉比较的好理解~~):

  1 import java.util.Scanner;
  2 
  3 /*********************************************************************
  4  *                                                                      *
  5  *                             栈结构操作实例                             *
  6  *                                                                      *
  7  *********************************************************************/
  8 
  9 class DATA3{
 10     String name;
 11     int age;
 12 }
 13 
 14 class StackType{
 15     static final int MAXLEN = 50;
 16     DATA3[] data = http://www.mamicode.com/new DATA3[MAXLEN+1];        //数据元素
 17     int top;                                //栈顶
 18         
 19     StackType STInit(){
 20         StackType p;
 21         if((p = new StackType())!= null){    //申请栈内存
 22             p.top = 0;                        //设置栈顶为0
 23             return p;                        //返回指向栈的引用
 24         }
 25         return null;
 26     }
 27     //判断栈是否为空
 28     boolean STIsEmpty(StackType s){
 29         boolean t;
 30         t=(s.top == 0);
 31         return t;
 32     }
 33     //判断栈是否已满
 34     boolean STIsFull(StackType s){
 35         boolean t;
 36         t = (s.top == MAXLEN);
 37         return t;
 38     }
 39     //清空栈
 40     void STClear(StackType s){
 41         s.top = 0;
 42     }
 43     //释放栈所占用空间
 44     void STFree(StackType s){
 45         if(s != null){
 46             s = null;
 47         }
 48     }
 49     //入栈操作
 50     int PushST(StackType s,DATA3 data){
 51         if((s.top+1)>MAXLEN){
 52             System.out.print("栈溢出!\n");
 53             return 0;
 54         }
 55         s.data[++s.top] = data;                //将元素入栈
 56         return 1;
 57     }
 58     //出栈操作
 59     DATA3 PopST(StackType s){
 60         if(s.top == 0){
 61             System.out.println("栈为空!");
 62             System.exit(0);
 63         }
 64         return(s.data[s.top]);
 65     }
 66     //读栈顶数据
 67     DATA3 PeekST(StackType s){
 68         if(s.top == 0){
 69             System.out.println("栈为空2");
 70             System.exit(0);
 71         }
 72         return (s.data[s.top]);
 73     }
 74 }
 75 /*-----------------------------调试-----------------------------------*/
 76 public class P2_3 {
 77     @SuppressWarnings("resource")
 78     public static void main(String[] args) {
 79         StackType st =new StackType();
 80         DATA3 data1 = new DATA3();
 81         
 82         StackType stack = st.STInit();        //初始化栈
 83         Scanner input = new Scanner(System.in);
 84         System.out.println("入栈操作:");
 85         System.out.println("输入姓名 年龄进行入栈操作:");
 86         do{
 87             DATA3 data = http://www.mamicode.com/new DATA3();
 88             data.name = input.next();
 89             
 90             if(data.name.equals("0")){
 91                 break;                        //若输入0,则退出
 92             }else{
 93                 data.age = input.nextInt();
 94                 st.PushST(stack, data);
 95             }
 96         }while(true);
 97         String temp = "1";
 98         while(!temp.equals("0")){
 99             data1 = st.PopST(stack);
100             System.out.printf("出栈的数据是:(%s,%d)\n",data1.name,data1.age);
101             temp = input.next();
102         }
103         System.out.println("测试结束!");
104         st.STFree(st);                        //释放栈所占用的空间
105     }
106 }

 

闭关修炼中 *** Java常用算法之 -- 栈结构