【数据结构】2-2 队列问题
就是简单的队列的实现,出队、入队等操作
#include<iostream> using namespace std; template<class T> struct Node { T data; Node *next; }; template<class T> class LinkQueue { private: Node<T> *front, *rear; public: LinkQueue(); ~LinkQueue(); void EnQueue(T x); //将元素x入队 T DeQueue(); //将队头元素出队 T GetQueue(); //取队头元素 bool Empty(); //判断链队列是否为空 void print(); //打印队列 }; template<class T> LinkQueue<T>::LinkQueue() { Node<T> *s = new Node<T>(); s->next = NULL; front = rear = s; } template<class T> void LinkQueue<T>::EnQueue(T x) { Node<T> *s = new Node<T>(); s->data = x; s->next = NULL; rear->next = s; rear = s; } template<class T> T LinkQueue<T>::DeQueue() { T tem; //存储数据 Node<T> *del; //用来存放要删除的指针的地址 if (front == NULL) { cout << "ERROR" << endl; exit(1); } tem = front->next->data; del = front->next; front->next = front->next->next; if (front->next == NULL) { rear = front; } delete del; return tem; } template<class T> T LinkQueue<T>::GetQueue() { if (front == NULL) { cout << "ERROR" << endl; exit(1); } T tem; tem = front->next->data; return tem; } template<class T> bool LinkQueue<T>::Empty() { if (front == NULL) return true; else return false; } template<class T> LinkQueue<T>::~LinkQueue() { Node<T> *p = front; while (p) { Node<T> *q = p; p = p->next; delete q; } front = rear = NULL; } template<class T> void LinkQueue<T>::print() { Node<T> *p = front->next; while (p) { cout << p->data << " "; p = p->next; } cout << endl; }
测试代码:
#include"queue.cpp" int main() { LinkQueue<int> test; int number; cout << "请输入队中元素个数并分别赋值:" << endl; cin >> number; for (int i = 0; i < number; i++) { int x; cin >> x; test.EnQueue(x); } cout << "取队头元素:" << test.GetQueue() << endl; cout << "打印队列:"; test.print(); cout << "队头:" << test.DeQueue() << "出队" << endl; test.print(); system("pause"); return 0; }