闭关修炼中 *** 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 = 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 = 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 }
时间: 2024-10-13 22:52:54

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

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

什么是队列结构: 队列结构和栈结构很相类似. 和栈结构一样是一种具有特殊的运算规则,从数据的逻辑结构看,队列结构其实 是一种线性结构. 从存储结构来进一步划分,也分为两类: 顺序队列结构:即使用一组地址连续的内存单元依次保存队列中的数据. 在 程序中,可以定义一个指定大小的结构数组作为队列. 链式队列结构:即用链表形式保存队列中各元素的值. 典型的队列结构: 在队列结构中允许对两端进行操作,但两端的操作不同.一端只能删除--队头,一 端只能插入--队尾. 队列的运算规则: 是按照先进后出(Fir

闭关修炼中 *** Java常用算法之 -- 顺序表结构

给我的好姐姐聊聊天代码也打完了,小弟可是一心二用了,不过代码确实是挺长的. 代码打的时间长短不重要,重要的是理解~理解~理解.重要的事说三遍!!! 每天的重复,恨不得一天过成两天马上结束了,能多学点是点了. 山再高,咱能有耐心.同样如此~哈哈. 贴上代码吧: 1 import java.util.Scanner; 2 3 /***************************************** 4 * * 5 * 顺序结构 * 6 * * 7 ********************

STL中的常用算法

C++STL 常用算法,使用时包含#include <algorithm> 一.非变异算法 是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理.元素查找.子序列搜索.统计和匹配.非变异算法具有极为广泛的适用性,基本上可应用与各种容器. 1查找容器元素find 它用于查找等于某值的元素.它在迭代器区间[first,last)(闭开区间)上查找等于value值的元素,如果迭代器i所指的元素满足*i=value,则返回迭代器i:未找到满足条件的元素,返回last.函数原型:find( v1.

Java学习资料-Java常用算法-直接插入算法

SortAscending源程序public class SortAscending { public SortAscending () {  System.out.println("直接插入排序法"); } public static int[] sortAscending(int[] with) { // 直接插入法递增排序  int length = with.length;      // 待排数组的长度  int[] temp = new int[length];    //

Java学习资料-Java常用算法-选择排序算法

ChooseSort源程序public class ChooseSort { private static void ChooseSort (int [] a){  for(int i = 0; i < a.length; i++){   //对数组循环,假设数据排在前面的元素总比后面的小,然后与后面的数据进行比较   int k = i;   for(int j = i+1; j <a.length; j++){//对数据遍历,寻找最小的数据元素的数组下标    if(a[j]<a[k

Java学习资料-Java常用算法-二分查找算法

binarySearch源程序 public class binarySearch { public static int binarySearch(int[] dataset ,int data) { int beginIndex = 0; //定义起始位置 int endIndex = dataset.length - 1;  //定义结束位置 int midIndex = -1; //定义中点 if(data <dataset[beginIndex]||data>dataset[endI

java 常用算法

插入排序: public static void main(String[] args) { int array[] = {5,4,2,45,44,34,22}; System.out.println(Arrays.toString(array)); for (int i = 0; i < array.length; i++) { int tempMin = array[i]; for (int j = i+1; j < array.length; j++) { if(array[j]<

图像处理之 opencv 学习---opencv 中的常用算法

http://blog.csdn.net/lindazhou2005/article/details/1534234 文中有提到鲁棒性 http://blog.csdn.net/chary8088/article/details/24935559

java常用算法

冒泡排序: //降序 public static int[] bubbleSort(int[] array){ for(int i = 0; i < array.length; i++){ int curval = array[i]; for(int j = i - 1; j >= 0; j--){ int temp = array[j]; if(curval > temp){ array[j] = curval; array[j+1] = temp; } } } return arra