zoukankan      html  css  js  c++  java
  • 队列——数组实现(循环队列)

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <ctime> 
    
    using namespace std;
    
    using ElemType = int;
    const int MAXSIZE = 20;
    
    // 队列结构
    class Queue {
    public:
    	ElemType data[MAXSIZE];
    	int front;		// 队首 
    	int rear;		// 队尾 
    };
    
    // 初始化队列 
    void initQueue(Queue &queue)
    {
    	queue.front = 0;
    	queue.rear = 0;
    }
    
    // 判空:front == rear 
    bool isEmpty(const Queue &queue)
    {
    	if (queue.front == queue.rear)
    		return true;
    	return false;
    }
    
    // 判满:(rear+1) % MAXSIZE == front 
    bool isFull(const Queue &queue)
    {
    	if (queue.front == (queue.rear+1) % MAXSIZE)
    		return true;
    	return false;
    }
    
    // 进队列 
    void addElem(Queue &queue, ElemType val)
    {
    	if (isFull(queue)) {
    		cout << "queue is full...
    ";
    		return;
    	}
    	queue.data[queue.rear] = val;
    	queue.rear = (queue.rear + 1) % MAXSIZE;
    }
    
    // 出队列 
    void delElem(Queue &queue)
    {
    	if (isEmpty(queue)) {
    		cout << "queue is empty...
    ";
    		return;
    	}
    	cout << "队首元素为" << queue.data[queue.front] << endl;
    	queue.front = (queue.front + 1) % MAXSIZE;
    }
    
    // 获取队列长度:(rear - front) % MAXSIZE 
    int getLen(const Queue &queue)
    {
    	return (queue.rear - queue.front) % MAXSIZE;
    }
    
    int main()
    {
    	Queue queue;
    	int queLen = 0;
    	initQueue(queue);
    	queLen = getLen(queue);
    	cout << "当前队列的长度为:" << queLen << endl;
    	addElem(queue, 1);
    	addElem(queue, 2);
    	addElem(queue, 3);
    	addElem(queue, 4);
    	queLen = getLen(queue);
    	cout << "当前队列的长度为:" << queLen << endl;
    	delElem(queue);
    	delElem(queue); 
    	queLen = getLen(queue);
    	cout << "当前队列的长度为:" << queLen << endl;
    }
    

    【补充】

    循环队列队首和队尾的一些关系(假设队首下标为front,队尾下标为rear,数组长度为MAXSIZE):

    • 队列为空:rear == front
    • 队列为满:(rear + 1) % MAXSIZE == front          //(基于给队列留一个空闲位置而实现,不然和队列为空时条件重合)
    • 队列长度:(rear - front) % MAXSIZE
  • 相关阅读:
    BOM,文档宽高及窗口事件小析
    表格、表单操作
    DOM相关属性,方法,兼容性问题处理小析
    js回调函数,字符串,数组小析
    js中return,this,arguments,currentStyle和getComputedStyle小析
    JS作用域,浏览器解析原理
    JS中注意事项
    PS中常用快捷键
    javaweb之框架标签(day1 框架标签的使用)
    网络编程课程复习
  • 原文地址:https://www.cnblogs.com/xzxl/p/8643448.html
Copyright © 2011-2022 走看看