算法与数据结构 栈队列 (C++)

5.随机产生10个100以内的整数建立链队列,显示链队列中所有数据元素;从键盘输入出队元素个数 n (1<= n <=10),将 n 个元素出队后显示此时的队头元素。

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
// 定义链表的节点
template <typename DataType>
class Node {
public:
    DataType data;
    Node* next;
};
// 定义链队列
template <typename DataType>
class LinkQueue {
public:
    LinkQueue() {
        front = new Node<DataType>;
        rear = front;
        front->next = nullptr;
    }
    ~LinkQueue() {
        clear();
        delete front;
    }
    void EnQueue(DataType x);
    DataType Dequeue();
    void Display(); // 显示队列中所有数据元素
    void GenerateRandomElements(int count); // 随机生成元素建立链队列
    DataType Front(); // 获取队头元素
    void clear(); // 清空队列
private:
    Node<DataType>* front;
    Node<DataType>* rear;
};
// 链队列的实现——入队
template <typename DataType>
void LinkQueue<DataType>::EnQueue(DataType x) {
    Node<DataType>* s = new Node<DataType>;
    s->data = x;
    s->next = nullptr;
    rear->next = s;
    rear = s;
}
// 链队列的实现——出队
template <typename DataType>
DataType LinkQueue<DataType>::Dequeue() {
    if (rear == front) {
        throw "下溢";
    }
    Node<DataType>* p = front->next;
    DataType x = p->data;
    front->next = p->next;
    if (p == rear) {
        rear = front;
    }
    delete p;
    return x;
}
// 显示队列中所有数据元素
template <typename DataType>
void LinkQueue<DataType>::Display() {
    Node<DataType>* p = front->next;
    while (p != nullptr) {
        cout << p->data << " ";
        p = p->next;
    }
    cout << endl;
}
// 随机生成元素建立链队列
template <typename DataType>
void LinkQueue<DataType>::GenerateRandomElements(int count) {
    srand(time(nullptr));
    for (int i = 0; i < count; ++i) {
        DataType x = rand() % 100; // 生成0到99的随机数
        EnQueue(x);
    }
}
// 获取队头元素
template <typename DataType>
DataType LinkQueue<DataType>::Front() {
    if (rear == front) {
        throw "队列为空";
    }
    return front->next->data;
}
// 清空队列
template <typename DataType>
void LinkQueue<DataType>::clear() {
    Node<DataType>* temp;
    while (front->next!=nullptr) {
        temp = front->next;
        front->next = temp->next;
        delete temp;
        if (temp == rear)
        {
            rear = front;
        }
    }
}
int main() {
    LinkQueue<int> queue;
    // 随机生成10个100以内的整数建立链队列
    queue.GenerateRandomElements(10);
    cout << "链队列中所有数据元素:";
    queue.Display(); // 显示队列中所有数据元素
    int n;
    cout << "请输入出队元素个数 n (1<= n <=10):";
    cin>>n;
    // 出队操作
    for (int i = 0; i < n; ++i) {   
            int dequeuedElement = queue.Dequeue();
            cout << "出队元素:" << dequeuedElement << endl;
    }
    // 显示此时的队头元素
        cout << "此时的队头元素:" << queue.Front() << endl;
    return 0;
}

相关推荐

  1. 算法数据结构 队列C++)

    2024-04-14 15:46:03       15 阅读
  2. 数据结构算法——队列

    2024-04-14 15:46:03       12 阅读
  3. Python数据结构算法——数据结构(队列)

    2024-04-14 15:46:03       19 阅读
  4. 算法数据结构 循环队列C++)

    2024-04-14 15:46:03       14 阅读
  5. 算法数据结构 顺序C++)

    2024-04-14 15:46:03       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-14 15:46:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-14 15:46:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-14 15:46:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-14 15:46:03       18 阅读

热门阅读

  1. python制造虚拟姓名电话保存到mysql数据库

    2024-04-14 15:46:03       13 阅读
  2. 一体化泵站的生产制造流程怎样

    2024-04-14 15:46:03       14 阅读
  3. 3.15 Python逻辑运算符

    2024-04-14 15:46:03       12 阅读
  4. 基于单片机的天然气报警系统设计

    2024-04-14 15:46:03       14 阅读
  5. 【算法】Cordic算法的原理及matlab/verilog应用

    2024-04-14 15:46:03       14 阅读
  6. 题目:输入3个数a,b,c,按大小顺序输出。

    2024-04-14 15:46:03       13 阅读
  7. 谷歌翻译接口-国内使用在线翻译API

    2024-04-14 15:46:03       13 阅读
  8. 云服务器&宝塔&ssh:tabby 部署SpringBoot项目

    2024-04-14 15:46:03       34 阅读
  9. 《高等数学》笔记

    2024-04-14 15:46:03       20 阅读
  10. 两分钟启动一个flask应用

    2024-04-14 15:46:03       16 阅读