代码实现:
//链式队
#include<iostream>
using namespace std;
struct LinkNode {
int data;
LinkNode* link;
LinkNode(LinkNode* ptr = NULL) {
link = ptr;
}
LinkNode(const int& item, LinkNode* ptr = NULL) {
data = item;
link = ptr;
}
};
class LinkedQueue {
public:
LinkedQueue() :rear(NULL), front(NULL) {
}
~LinkedQueue() {
makeEmpty();
}
void makeEmpty() {
LinkNode* ptr;
while (front != NULL) {
ptr = front;
front = front->link;
delete ptr;
}
}
bool EnQueue(const int&x){
if (front == NULL) {
front = rear = new LinkNode(x);
if (front == NULL && rear == NULL)return false;
}
else {
rear->link = new LinkNode(x);
if (rear->link == NULL)return false;
rear = rear->link;
}
return true;
}
bool DeQueue(int &x){
if (IsEmpty() == true)return false;
LinkNode* ptr = front;
front = front->link;
x = ptr->data;
delete ptr;
return true;
}
int getSize() {
if (IsEmpty() == true)return 0;
int k = 0;
LinkNode* ptr = front;
while (ptr != NULL) {
ptr = ptr->link;
k++;
}
return k;
}
bool IsEmpty() {
return front==NULL?true:false;
}
void input() {
int i,k;
cout << "请输入要输入元素的个数:";
cin >> i;
cout << endl;
for (int j = 0; j < i; j++) {
cout << "请输入第" << j + 1 << "个元素的值:";
cin >> k;
EnQueue(k);
cout << endl;
}
}
void output() {
if (IsEmpty() == true)return;
LinkNode* ptr = front;
for (int i = 0; i <= getSize()+1; i++) {
cout << " ————— ";
}
cout << endl; cout << endl; cout << endl;
printf(" 队首");
while (ptr != NULL) {
printf("%12d", ptr->data);
ptr=ptr->link;
}
printf(" 队尾");
cout << endl; cout << endl; cout << endl;
for (int i = 0; i <= getSize()+1; i++) {
cout << " ————— ";
}
}
private:
LinkNode* front, * rear;
};