`

栈和队列

 
阅读更多

栈:

package com.nanjing.dataStruc;

/**
 * 后进先出(LIFO),栈顶压入,栈顶压出,只允许访问最后一个插入的数据项,应用:单词逆序,分隔符匹配
 */
public class Stack {
    private int maxSize;
    private long[] stackArray;
    private int top;
    private int nItemes;

    public Stack(int s) {
        nItemes=0;
        maxSize = s;
        stackArray = new long[maxSize];
        top = -1;
    }

    public void push(long a) throws Exception {
        if (top >= maxSize-1)
            throw new Exception("Stack is full~");
        stackArray[++top] = a;
        nItemes++;
    }

    public long pop() {
        nItemes--;
        return stackArray[top--];

    }

    public long peek() {
        return stackArray[top];
    }

    public int getSize(){
        return nItemes;
    }

    public boolean isEmpty() {
        return top == -1;
    }

    public boolean isFull() {
        return top == maxSize;
    }

    public static void main(String[] args) {
        Stack stack = new Stack(10);
        try {
            stack.push(23);
            stack.push(123);
            stack.push(4);
            stack.push(67);
            stack.push(45);
            stack.push(87);
            stack.push(65);
            stack.pop();
            System.out.println("一共"+stack.getSize()+"个元素");
            while (!stack.isEmpty()) {
                System.out.print(stack.pop() + "\t");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }
    }
}

 

 

队列:

package com.nanjing.dataStruc;

/**
 * 先进先出(FIFO),只允许访问第一个插入的数据项,可以在队尾插入数据,在队头移除数据,应用:解析算术表达式
 */
public class Queue {
    private long[] queueArray;
    private int tail;
    private int head;
    private int nItemes;
    private int maxSize;

    public Queue(int size) {
        queueArray = new long[size];
        maxSize = size;
        tail = 0;
        head = -1;
        nItemes = 0;
    }

    public void insert(long element) {
        if (head == maxSize - 1)
            throw new ArrayIndexOutOfBoundsException("队列越界,不能添加");
        queueArray[++head] = element;
        nItemes++;
    }

    public long remove() {
        if (tail == maxSize)
            throw new RuntimeException("队列越界,不能删除");
        long q = queueArray[tail++];
        nItemes--;
        return q;
    }

    public long getSize() {
        return nItemes;
    }

    public boolean isEmpty() {
        return nItemes == 0;
    }

    public boolean isFull() {
        return nItemes == maxSize;
    }

    public static void main(String[] args) {
        Queue queue = new Queue(10);
        queue.insert(23);
        queue.insert(54);
        queue.insert(76);
        queue.insert(87);
        queue.insert(65);
        queue.remove();
        queue.remove();
        queue.remove();
        queue.remove();
        queue.remove();


        queue.insert(878);
        queue.insert(455);
        queue.insert(343);
        while (!queue.isEmpty()) {
            System.out.println(queue.remove());
        }
    }
}

 

优先级队列:

package com.nanjing.dataStruc;

/**
 * 优先级队列,允许访问最小或者最大的数据项,可以有序的插入新数据项和移除关键字最小的数据项,最大的数据项先被处理
 */
public class PriorityQ {
    private long[] priArray;
    private int maxSize;
    private int nItemes;

    public PriorityQ(int maxSize) {
        this.priArray = new long[maxSize];
        this.maxSize = maxSize;
        nItemes = 0;
    }

    public void insert(long data) {
        int j;
        if (nItemes == 0) {
            priArray[nItemes++] = data;
        } else {
            for (j = nItemes - 1; j >= 0; j--) {
                if (data < priArray[j]) {
                    priArray[j + 1] = priArray[j];      //笔插入数据大的整体右移
                } else {
                    break;
                }
            }
            priArray[j + 1] = data;
            nItemes++;
        }
    }

    public long remove() {
        long q = priArray[--nItemes];
        return q;
    }

    public boolean isEmpty() {
        return nItemes == 0;
    }

    public boolean isFull() {
        return nItemes == maxSize;
    }

    public static void main(String[] args) {
        PriorityQ priorityQ = new PriorityQ(10);
        priorityQ.insert(23);
        priorityQ.insert(656);
        priorityQ.insert(134);
        priorityQ.insert(54);
        priorityQ.insert(12);
        long[] priarry = priorityQ.getPriArray();
        System.out.print("插入了:");
        for (int i = 0; i < priarry.length; i++) {
            System.out.print(+priarry[i] + "\t");
        }
        System.out.println();
        System.out.print("删除了:");
        while (!priorityQ.isEmpty()) {
            System.out.print(priorityQ.remove() + "\t");
        }
    }

    public long[] getPriArray() {
        return priArray;
    }

    public void setPriArray(long[] priArray) {
        this.priArray = priArray;
    }
}

 

 

分享到:
评论

相关推荐

    栈和队列的基本操作

    "栈和队列的基本操作" 栈和队列是计算机科学中两个基本的数据结构,它们的基本操作包括进栈、出栈、进队、出队等。栈是一种后进先出的数据结构,即最后一个入栈的元素将是第一个出栈的元素。队列是一种先进先出的...

    数据结构实验栈和队列详细实验报告

    【栈和队列的基本概念】 栈是一种特殊的线性表,具有“后进先出”(LIFO,Last In First Out)的特点。栈的主要操作包括入栈(Push)和出栈(Pop)。入栈操作是在栈顶添加元素,而出栈则是删除栈顶元素。栈的应用...

    数据结构栈和队列试题及答案

    队列和栈都是运算受限的线性表,只允许在表的一端进行特定的插入和删除操作,该说法正确。 18. **栈和队列的基本属性** 栈和队列都是线性表,但它们分别采用了LIFO和FIFO的规则来约束插入和删除操作,该说法正确...

    栈和队列源代码

    在计算机科学中,栈和队列是两种基本的数据结构,它们在编程中有着广泛的应用。栈被称为“后进先出”(LIFO, Last In First Out)数据结构,而队列则是“先进先出”(FIFO, First In First Out)数据结构。这两种...

    数据结构栈和队列(参考代码)

    ### 数据结构栈和队列知识点解析 #### 一、栈的基本概念与操作 **栈**是一种特殊的线性表,只允许在一端进行插入和删除操作,这一端被称为栈顶,另一端被称为栈底。栈遵循先进后出(First In Last Out, FILO)的...

    用栈和队列编写的停车管理系统

    根据给定的信息,本文将详细解释如何利用栈和队列这两种数据结构来设计一个高效的停车管理系统。我们将重点探讨栈和队列的特点,并说明如何利用这些特点解决停车问题。 ### 栈与队列的基础概念 #### 栈(Stack) ...

    回文判断程序栈和队列基本操作

    本话题聚焦于"回文判断程序",并涉及到"栈"和"队列"这两种基本数据结构的操作。回文是一种正读反读都能读通的字符串,如"level"或"madam"。在判断一个字符串是否为回文时,栈和队列可以发挥重要作用。 首先,我们来...

    栈和队列的基本操作实现及其应用实验报告

    ### 栈和队列的基本操作实现及其应用实验报告 #### 实验目的 1. **熟练掌握栈和队列的基本操作**:在数组和链表两种存储结构上实现栈和队列的基本操作。 2. **应用栈和队列解决实际问题**:通过具体的编程练习,...

    栈和队列(基础知识,单项选择题,填空题,简答题,程序)

    ### 栈和队列基础知识详解 #### 栈与队列的特性及作用 栈和队列作为两种基本的数据结构,在程序设计中扮演着至关重要的角色。**栈**遵循后进先出(Last In First Out,LIFO)的原则,类似于一叠盘子,你只能在最...

    数据结构实验报告《二、栈和队列的运用》

    ### 数据结构实验报告《二、栈和队列的运用》 #### 栈和队列的基础概念及应用 在计算机科学中,数据结构是用于组织和存储数据的方式,它允许高效地访问和修改数据。其中,栈(Stack)和队列(Queue)是最基本的...

    利用栈和队列实现迷宫

    "利用栈和队列实现迷宫" 通过栈和队列两种不同的方法来实现迷宫问题。队列方法求出的迷宫路径是最短路径。迷宫问题是指在一个迷宫中找到从起点到终点的路径。这里我们使用栈和队列两种数据结构来解决这个问题。 栈...

    栈和队列的算法以及应用

    ### 栈和队列的算法以及应用 #### 栈的基本概念与操作 栈是一种线性数据结构,其特点是只能在一端进行插入或删除操作,通常称为栈顶(top)。这种特性使得栈的操作遵循“后进先出”(Last In First Out, LIFO)的原则...

    栈和队列 实验报告

    实验报告——栈和队列 一、实验目的 本次实验的主要目标是深入理解和熟练掌握两种基本数据结构——栈和队列的实现。首先,通过编程实现顺序栈,旨在熟悉栈的“后进先出”(LIFO)特性,以及相关的操作如初始化、...

    数据结构试验2-栈和队列实验报告含源码

    在这个"数据结构试验2-栈和队列实验报告含源码"中,我们将深入探讨两个基本且至关重要的数据结构——栈和队列。 栈(Stack)是一种后进先出(LIFO,Last In First Out)的数据结构。想象一个堆叠的盘子,最后一个放...

    栈和队列详解

    "栈和队列详解" 栈和队列是数据结构中两个基本的数据结构概念,本文将详细介绍栈和队列的定义、原理、操作和应用。 栈的定义和原理 栈是一种后进先出(Last-In-First-Out,LIFO)的数据结构,栈中的元素按照加入...

    数据结构栈和队列解决迷宫问题

    数据结构栈和队列解决迷宫问题 本文档详细介绍了利用栈和队列解决迷宫问题的步骤,对于初学者学习数据结构能很好的进行辅导。本文档主要涉及到数据结构的两个重要概念:栈和队列,并介绍了如何使用这两个数据结构来...

    栈和队列的基本操作实现及其应用

    【栈和队列的基本操作实现及其应用】 栈和队列是两种重要的数据结构,它们在计算机科学和软件工程中有着广泛的应用。本实验旨在通过实际操作加深对这两种数据结构的理解,并学习如何用它们来解决实际问题。 栈是一...

    数据结构 栈和队列PPT

    栈和队列是两种基础且重要的数据结构,广泛应用于各种算法和程序设计中。本课件及课堂笔记将深入探讨这两种数据结构的概念、特性以及它们在实际问题中的应用。 栈(Stack)是一种后进先出(LIFO,Last In First Out...

    数据结构上机实验_栈和队列的应用_迷宫问题 (含代码和报告)

    **实验背景**:本实验旨在加深学生对数据结构中栈和队列的理解,并通过实际编程应用的方式掌握这两种数据结构的特点及其应用场景。栈和队列作为两种基本的数据结构,在算法设计、程序开发等多个领域都有着广泛的应用...

    C语言 栈和队列 栈和队列是两种特殊的线性表,是操作受限的线性表,称限定性DS

    队列常用于模拟现实生活中排队等候的情况,例如任务调度、打印作业队列和缓冲区管理等。队列的基本操作包括初始化队列、销毁队列、清空队列、判断队列是否为空、获取队列长度、入队和出队。 在实际实现中,栈和队列...

Global site tag (gtag.js) - Google Analytics