线性结构 —— 循环数组

一、介绍

?上一章讲得数组队列无法重复使用,这一章我们使用环形数组实现队列。

二、代码

?使用环形数组模拟队列,首先编写一个CircleArray
class CircleArray {
    private int maxSize; // 表示数据最大容量
    private int front; // 指向队列头 第一个元素
    private int rear; // 指向队列最后元素的下一个位置,我们约定空出一个元素空间
    private int[] queue; // 队列

    // 创建队列构造器
    public  CircleArray(int maxSize) {
        this.maxSize = maxSize;
        queue = new int[maxSize];
    }

    // 当队列满时,rear是最后一个元素位置,因为是环形结构 + 1就变成头元素位置,取模是因为front索引有可能是0
    public boolean isFull() {
        return (rear + 1) % maxSize == front;
    }

    // 初始化时都为0
    public boolean isEmpty() {
        return rear == front;
    }

    // 添加元素 front不变,rear + 1,取模是因为获得索引,保证不超出最大范围
    public void addQueue(int n) {
        if (isFull()) {
            System.out.println("队列满,不能添加数据");
        } else {
            queue[rear] = n;
            rear = (rear + 1) % maxSize;
        }
    }

    // 取出和添加同理
    public int getQueue() {
        if (isEmpty()) {
            System.out.println("队列空,不能取出数据");
            throw new RuntimeException("队列空,不能去取出");
        }
        int temp = queue[front];
        front = (front + 1) % maxSize;
        return temp;
    }

    // 显示队列就不能用从0遍历了,我们要保证队列顺序,肯定从front开始,遍历size步,保证索引不超范围。
    public void showQueue() {
        if (isEmpty()) {
            System.out.println("队列空,没有数据");
        } else {
            for (int i = front; i < size(); i++) {
                System.out.printf("%d\n", queue[i % maxSize]);
            }
        }
    }

    public int headQueue() {
        if (isEmpty()) {
            System.out.println("队列空,没有头数据");
            throw new RuntimeException("队列空,没有头数据");
        }
        return queue[front];
    }

    // 本来rear - front 就是元素个数了,但有可能出现rear 比 front 小的情况
    public int size() {
        return (rear - front + maxSize) % maxSize;
    }
}

原文地址:https://www.cnblogs.com/gary97/p/12287022.html

时间: 2024-08-01 08:35:21

线性结构 —— 循环数组的相关文章

线性结构(二)--数组

1.将数组转换成面向对象的数组 2.使用线性查找 3.使用二分法查找 一.数组: public class MyArray { //用于存储数据的数组 private int[] elements; //实例对象时,创建数组 public MyArray(){ elements=new int[0]; } //获取数组长度的方法 public int size(){ return elements.length; } //往数组的末尾添加一个元素 public void add(int elem

线性结构之数组实现

#include<stdio.h> #include<stdlib.h> typedef struct { int *pArr; int length;//数组最大容量 int cnt;//当前数组有效个数 }SqList; void init_arr(SqList *,int length); void destroy_arr(); void remove_arr(SqList *,int,int *); void append_arr(SqList *,int); void i

c语言实现线性结构(数组与链表)

由于这两天看了数据结构,所以又把大学所学的c语言和指针"挂"起来了. 我是小菜鸟,我为自己代言.下面是我这两天学习的成果(数组和链表的实现,用的是c语言哦!哈哈). (一)数组的实现和操作.代码如下: #include <stdio.h> #include <malloc.h> #include <stdlib.h> struct Array{ int length;//数组长度 int * pBase;//存放数组首元素的地址 int cnt;//

数据结构 线性结构(数组[列表] ,链表 单链表的增删改查**, 线性结构的应用 队列 栈[函数的调用**]),非线性结构 树

数据结构 参考:http://lupython.gitee.io/ 线性结构 就是能够用一根线串起来的数据结构 数组 (列表) 问:申请数组的前提条件是啥? a[12]?内存需要满足的条件? 答:内存必须有一块连续的内存空间 int a[7] : 声明一个数组,这个数组的数组名是 a, 数组的大小是 7, 数组元素的类型是整型. int a[7] = array(1,2,3,4,5,6,7) 问:如何申请内存? 答:C,C++语言,申请:mallco (28).释放:free(28) 问:int

常见的线性列表结构---【数组、链表、栈、队列、堆】

我们在算法设计当中最常见的线性结构列表无非是一下几种: 1.数组: 数组应该是我最常用的一种.他的存储地址是连续的,就是当我们新开辟一个数组时,我们会给他分配一个连续的地址.由于他的地址是连续的,所以在我们知道他下标的时候,查找元素的速度非常快. 2.链表: 链表中的元素的位置不固定,链表中的每一个结点都一个头指针与尾指针,通过这样把链表中的元素连接起来,所以查找一个元素的时间与该元素所处的位置有关系.但是他在空间上面占有优势. 3.栈: 栈中的元素有一个特点,就是保持" 先进先出"的

线性结构之循环队列实现

#include<stdio.h> #include<malloc.h> #include<stdlib.h> #define maxsize 6 /* 循环队列是采用数组实现,传统的数组解决造成浪费大量内存.改进版既是循环数组来解决. */ typedef struct queue { int *pBase; int front; int rear; }Queue; void DeQueue(Queue *,int *val); void EnQueue(Queue

一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式

 打印数组中的每个元素,打印每个元素的地址: #include <stdio.h> #include <stdlib.h> void main(void) { int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int *p = a; p < a + 10;p++)  //指针类型决定4个字节 { printf("\n%p,%d", p, *p); } getchar(); } 指针数组 #inclu

线性结构

线性表及其实现 [引例]:多项式的表示 一元多项式:f(x)=a0+a1X+...+an-1Xn-1+anXn 主要运算:多项式的相加.相减.相乘等. [分析]如何表示多项式? 多项式的关键数据: 多项式的项数n 各项系数ai及指数i 方法1:顺序存储结构直接表示 数组各分量对应多项式的各项: a[i]:项Xi的系数ai,i是对应的指数 例如:f(x)=4x5-3x2+1,表示成:  0  1   2   3  4  5    ......    下标i 1 0 -3 0 0 4 ......

13. C#数据结构与算法 -- 线性结构

本文中,我们讨论了三个部分的内容: 什么是线性结构,线性结构有哪些特点 . 详细介绍了一个最简单线性结构顺序表,并且通过源代码进行一些的分析. 最后还举了一个例子,让我们更好的理解顺序表. 第一部分:什么是线性结构,线性结构有哪些特点 什么是线性结构,线性结构是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这 种一对一的关系指的是数据元素之间的位置关系,即: (1)除第一个位置的数据元素外,其它数据元素