队列

作者: 少冰三hun甜 | 来源:发表于2016-09-01 16:09 被阅读8次

基本原则:
先进先出,后进后出。 FIFO

普通队列

#include <iostream>
#include <cassert>
using namespace std;
class Queue {
private:
    int *data;
    int head, tail, length;
public:
    Queue(int length_input) {
        data = new int[length_input];
        length = length_input;
        head = 0;
        tail = -1;
    }

队列的构成:保存数据的数组 data【】
** 队列长度,也就是数组长度加一,length**
** 记录队首元素位置的head(index)**
** 记录队尾元素位置的tail(index)**

~Queue() {
delete[] data;
}


---
##入队

void push(int element) {
    if (tail + 1 < length) {
        tail++;
        data[tail] = element;
    }
}
>**思路:直接将tail++,然后将入队的值赋予data[tail]**

---
** **
    void output() {
        for (int i = head; i <= tail; i++) {
            cout << data[i] << " ";
        }
        cout << endl;
    }

** **
    int front(){
    assert(head<=tail);
     return data[head];     
    }

##出队
** **
    void pop(){
    assert(head<=tail);
        head++;
    }
**思路:直接将记录队首元素的head++;**

** **
};

int main() {
Queue queue(100);
for (int i = 1; i <= 10; i++) {
queue.push(i);
}
queue.output();
cout<< queue.front()<<endl;
queue.pop();
queue.output();
return 0;
}

------------------------------------------------------------------------------------------------
##循环队列

include <iostream>

include <cassert>

using namespace std;
class Queue {
private:
int *data;
int head, tail, length, count;
public:
Queue(int length_input) {
data = new int[length_input];
length = length_input;
head = 0;
tail = -1;
count = 0;
}

**队列的构成:保存数据的数组 data【】**
**                    队列长度,也就是数组长度加一,length**
**                    记录队首元素位置的head(index)**
**                    记录队尾元素位置的tail(index)**
**                    记录队列元素数量的count**

** **
    ~Queue() {
        delete[] data;
    }
    bool push(int element) {
        if (count < length) {
            tail = (tail + 1) % length;
            data[tail] = element;
            count++;
            return true;
        } else {
            return false;
        }
    }
    void output() {
        for (int i = head; i != tail + 1; i = (i + 1) % length) {
            cout << data[i] << " ";
        }
        cout << endl;
    }
    int front() {
        assert(count>0);
        return data[head];
    }
    void pop() {
        assert(count>0);
        head=(head+1)%length;
        count--;
    }
};

int main() {
Queue queue(100);
for (int i = 1; i <= 10; i++) {
queue.push(i);
}
queue.output();
cout << queue.front() << endl;
queue.pop();
queue.output();
return 0;
}

相关文章

  • 队列

    队列特性 对比队列和栈 基于数组的队列 对比队列学习循环队列 循环队列难点 阻塞队列 并发队列 应用:线程池中拒绝...

  • 队列

    文章结构 什么是队列 实现队列顺序队列链式队列循环队列 Java中的队列 1. 什么是队列 队列也是一种操作受限的...

  • iOS底层-- GCD源码分析(1)-- dispatch_qu

    手动目录认识队列队列的结构队列的产生主队列全局队列创建的队列管理队列 代码版本dispatch version :...

  • 队列,异步,同步,线程通俗理解

    一、队列 串行队列 并行队列 主队列(只在主线程执行的串行队列) 全局队列(系统的并行队列) 二、 任务(是否具有...

  • GCD基础总结一

    上代码~ 同步串行队列 同步并行队列 异步串行队列 异步并行队列 主队列同步 会卡住 主队列异步

  • OC多线程

    队列创建 线程与队列 队列线程间通信 队列组

  • GCD

    获得主队列 获得全局队列 串行队列 异步队列 同步队列 阻隔队列 (像栅栏一样 ) 例如 A -->栅栏 --...

  • 数据结构第三篇 队列

    队列的特性 前进先出。 我们来大致描述下进出队列的情况。 进队列 1 进队列现在队列是 12 进队列现在队列是 1...

  • 利用链表实现队列

    队列成员变量: 队列长度 队列头节点 队列尾节点队列方法: 队列包含元素个数 队列是否为空 进队操作 出队操作 d...

  • Git 常用操作命令(持续更新)

    当前更新到stash队列 查看stash队列 清空队列 删除某个队列

网友评论

      本文标题:队列

      本文链接:https://www.haomeiwen.com/subject/dtacettx.html