数据结构学习--Java栈和队列

栈:先进后出

队列:先进先出

都是数组存放,但是删除的时候不是删除了数组中的数据,而是使用增加游标标识的方式实现删除,“游标标识”加加或者减减完成删除操作,查看的时候,也不是直接查看栈和队列的数组元素,而是使用游标的方式向外查看。

栈的实现

package com.example.deer;

public class MyStack {    private long[] arr;    private int top;

    /**     * 默认构造函数     */    public MyStack(){        arr = new long[10];        top = -1;    }

    /**     * 带参数构造函数     * @param maxsize     */    public MyStack(int maxsize){        arr = new long[maxsize];        top = -1;    }

    /**     * 新增数据     * @param value     */    public void push(int value){        arr[++top]  = value;    }

    /**     * 移除数据     * @return     */    public long pop(){        return arr[top--];    }

    /**     * 查看数据     * @return     */    public long peek(){        return arr[top];    }

    /**     * 判断是否为空     * @return     */    public boolean isEmpty(){        return top == -1;    }

    /**     * 判断是否满了     * @return     */    public boolean isFull(){        return top == arr.length - 1;    }}队列的实现
package com.example.deer;

public class MyQueue {    //底层使用数组    private long[] arr;    //有效数据大小    private int elements;    //队头    private int front;    //队尾    private int end;

    /**     * 默认构造方法     */    public MyQueue(){        arr = new long[10];        elements = 0;        front = 0;        end = -1;    }

    /**     * 带参数的构造方法,参数为数组大小     * @param maxsize     */    public MyQueue(int maxsize){        arr = new long[maxsize];        elements = 0;        front = 0;        end = -1;    }    /**     * 添加数据,从队尾插入     */    public void insert(long value){        arr[++end] = value;        elements ++;    }    /**     * 删除数据,从队头删除     */    public long remove(){
     elements -- ;
        return arr[front++];    }    /**     * 查看数据,从队头查看     */    public long peek(){        return arr[front];    }    /**     * 判断是否为空     */    public boolean isEmpty(){        return elements == 0;    }    /**     * 判断是否满了     */    public boolean isFull(){        return elements == arr.length;    }}循环队列主要解决的问题是:队列一旦存满了或者删的超过队列长度,将会出现角标越界的问题。循环队列实现
package com.example.deer;

public class MyQueue {    //底层使用数组    private long[] arr;    //有效数据大小    private int elements;    //队头    private int front;    //队尾    private int end;

    /**     * 默认构造方法     */    public MyQueue(){        arr = new long[10];        elements = 0;        front = 0;        end = -1;    }

    /**     * 带参数的构造方法,参数为数组大小     * @param maxsize     */    public MyQueue(int maxsize){        arr = new long[maxsize];        elements = 0;        front = 0;        end = -1;    }    /**     * 添加数据,从队尾插入     */    public void insert(long value){        if(end == arr.length - 1 ){            end = -1;        }        arr[++end] = value;        elements ++;    }    /**     * 删除数据,从队头删除     */    public long remove(){        long value = arr[front++];        if(front == arr.length){            front = 0;        }        elements -- ;        return value;    }    /**     * 查看数据,从队头查看     */    public long peek(){        return arr[front];    }    /**     * 判断是否为空     */    public boolean isEmpty(){        return elements == 0;    }    /**     * 判断是否满了     */    public boolean isFull(){        return elements == arr.length;    }}

原文地址:https://www.cnblogs.com/xiaohualu/p/11775708.html

时间: 2024-08-17 23:27:16

数据结构学习--Java栈和队列的相关文章

数据结构学习总结 栈和队列

一,顺序栈的基本操作 同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如图 1 所示.                                                               图 1 栈存储结构示意图 从图 1 我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 "存" 和 "取" 的过程有特殊的要求: 1,栈只能从表的一端存取数据,另一端是封闭的,如图 1 所示

数据结构与算法--栈、队列(队列)

Hello,everybody.我们又见面了.今天我们来学习一下队列这个数据结构,let's Go,开始我们的征程吧. 首先,举两个生活中的常见例子.相信大家,在用电脑工作娱乐时,都会碰到这样的现象.当我们点击程序或进行其他操作时,电脑处于死机状态.正当我们准备Reset时,它突然像打了鸡血似的,突然把刚才我们的操作,按顺序执行了一遍.之所以会出现这个现象,是因为操作系统的多个程序,需要通过一个管道输出,而按先后顺序排队造成的. 还有有个例子,在我们打客服热线时,有时会出现等待的现象.当其他客户

4、蛤蟆的数据结构笔记之四栈和队列定义

4.蛤蟆的数据结构笔记之四栈和队列定义 本篇名言:"人生应该如蜡烛一样,从顶燃到底,一直都是光明的." 今天学习栈和队列了.从第二篇学习时候我们知道,其实也是线性表的一种. 我们先来看下定义. 欢迎转载,转载请标明出处: 1.  栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称

数据结构算法(1)--栈与队列

数据结构算法(1)--栈与队列 总结并记录学习数据结构过程中遇到的问题及算法. 一些常见算法: Note: 基础应用. 递归的非递归转化. 阶乘 递归实现: #include <iostream> using namespace std; int F(int n) { if (n == 0 || n == 1) return 1; else return n * F(n - 1); } int main() { int s; cin >> s; int result = F(s);

SDUT 2449 数据结构实验之栈与队列十:走迷宫

数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方向任意走一步,并且有些格子是不能走动,求从起点到终点经过每个格子至多一次的走法数. Input 第一行一个整数T 表示有T 组测试数据.(T <= 110) 对于每组测试数据: 第一行两个整数n, m,表示迷宫有n * m 个格子.(1

SDUT-3335_数据结构实验之栈与队列八:栈的基本操作

数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 堆栈是一种基本的数据结构.堆栈具有两种基本操作方式,push 和 pop.push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出.现在我们就来验证一下堆栈的使用. Input 首先输入整数t(1 <= t <= 10),代表测试的组数,以后是 t 组输入. 对于每组测试数据,第一行输入两个正整数 m(1 <= m &

SDUT-2088_数据结构实验之栈与队列十一:refresh的停车场

数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description refresh最近发了一笔横财,开了一家停车场.由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多.当停车场满时,要进入的车辆会进入便道等待,最先进入便道的车辆会优先 进入停车场,而且停车场的结构要求只出去的车辆必须是停车场中最后进去的车辆.现告诉你停车场容量N以及命令数M,以及一些命令(Add num 表

SDUT-2449_数据结构实验之栈与队列十:走迷宫

数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方向任意走一步,并且有些格子是不能走动,求从起点到终点经过每个格子至多一次的走法数. Input 第一行一个整数T 表示有T 组测试数据.(T <= 110) 对于每组测试数据: 第一行两个整数n, m,表示迷宫有n * m 个格子.(1

数据结构实验之栈与队列九:行编辑器

数据结构实验之栈与队列九:行编辑器 Description 一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区. 由于用户在终端上进行输入时,不能保证不出差错,因此,若在编辑程序中,“每接受一个字符即存入用户数据区”的做法显然不是最恰当的.较好的做法是,设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区.允许用户输入出差错,并在发现有误时可以及时更正.例如,当用户发现刚刚键入的一个字符是错的时,可补进一个退格符"#",以表示前一个字符无