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;
}