【数据结构】栈结构操作实例

栈结构

栈结构是从数据的运算来分类的。栈结构具有特殊的运算规则。从数据的逻辑结构来看,栈结构是一种线性结构。从数据的存储结构来划分,分为顺序栈结构和链式栈结构。栈结构是按照“后进先出”的原则处理结点数据的。

栈结构操作实例:

package com.company.dataStructure;

import java.util.Scanner;

class DATA3 {
    String name;
    int age;
}

class StackType {
    static final int MAXLEN = 50;
    DATA3[] data = new DATA3[MAXLEN]; //数据元素
    int top; //栈顶

    StackType STInit() {
        StackType p;
        if ((p = new StackType()) != null) { //申请栈内存
            p.top = 0; //设置栈顶为0
            return p;//返回指向栈的引用
        }
        return null;
    }

    boolean STIsEmpty(StackType s) {//判断栈是否为空
        boolean t;
        t = (s.top == 0);
        return t;
    }

    boolean STIsFull(StackType s) {//判断栈是否已满
        boolean t;
        t = (s.top == MAXLEN);
        return t;
    }

    void SLClear(StackType s) {//清空栈
        s.top = 0;
    }

    void STFree(StackType s) { //释放栈所占用的空间
        if (s != null) {
            s = null;
        }
    }

    int PushST(StackType s, DATA3 data) { //入栈操作
        if ((s.top + 1) > MAXLEN) {
            System.out.print("栈溢出!\n");
            return 0;
        }
        s.data[++s.top] = data; //将元素入栈
        return 1;
    }

    DATA3 PopST(StackType s) {//出栈操作
        if (s.top == 0) {
            System.out.print("栈为空!\n");
            System.exit(0);
        }
        return (s.data[s.top--]);
    }

    DATA3 PeekST(StackType s) {
        if (s.top == 0) {
            System.out.printf("栈为空!\n");
            System.exit(0);
        }
        return (s.data[s.top]);
    }
}

public class StackDemo {
    public static void main(String[] args) {
        StackType st = new StackType();
        DATA3 data1 = new DATA3();

        StackType stack = st.STInit(); //初始化栈
        Scanner input = new Scanner(System.in);
        System.out.print("入栈操作:\n");
        System.out.println("输入姓名 年龄进行入栈操作:");
        do {
            DATA3 data = new DATA3();
            data.name = input.next();

            if (data.name.equals("0")) {
                break;
            } 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); //释放栈所占用的空间
    }
}

 

你可能感兴趣的:(数据结构与算法,学习历程记录)