1 #include<stdlib.h>
2 #include <iostream>
3 using std::cout;
4 using std::endl;
5
6 #define SUM 3 //此处设置队列的大小,因为队列节点是 malloc 的空间,一般不用设置队列上限。但是为了测试方便就加了上限
7
8 typedef struct QNode{
9 int data;
10 struct QNode *pNext;
11 }QNode,*pQNode;
12
13 class Queue{
14 private:
15 pQNode m_front;
16 pQNode m_rear;
17 int m_sum;//队列中节点数目
18 public:
19 Queue();
20 ~Queue();
21 void push(int x);
22 void pop();
23 int front();
24 int back();
25 bool empty();
26 bool full();
27 };
28 Queue::Queue(){
29 m_front = m_rear =(pQNode)malloc(sizeof(QNode));
30 m_front->pNext = NULL;
31 m_sum = 0;
32 }
33 Queue::~Queue(){//清空队列
34 pQNode p,q;
35 m_rear = m_front;
36 p = m_front->pNext;
37 m_front->pNext = NULL;
38 while(p){
39 q = p;
40 p = p->pNext;
41 free(q);
42 }
43 free(m_front);
44 }
45 void Queue::push(int x){
46 if(!full()){
47 pQNode p =(pQNode)malloc(sizeof(QNode));
48 p->data = x;
49 p->pNext = NULL;
50 cout<< "进队列元素是"<< x <<endl;
51 m_rear->pNext = p;
52 m_rear = p;
53 m_sum++;
54 }else{
55 cout << "队列已满" <<endl;
56 }
57 }
58 void Queue::pop(){
59
60 pQNode tmp;//指向被删除节点,方便释放空间&判断被删节点是否是对尾节点
61 if(empty()){
62 cout << "队列为空,出队失败" <<endl;
63 return ;
64 }
65 cout <<"删除的队列头是:" << m_front->pNext->data <<endl;
66 tmp = m_front->pNext;
67 m_front->pNext = tmp->pNext;
68 if(m_rear == tmp){
69 m_rear = m_front;
70 }
71 free(tmp);
72 m_sum--;
73 }
74 int Queue::front(){
75 if(empty()){
76 cout << "队列为空" <<endl;
77 return -1;//队列为空
78 }else{
79 return m_front->pNext->data;
80 }
81 }
82 int Queue::back(){
83 if(empty()){
84 cout <<"队列为空" <<endl;
85 return -1;//队列为空
86 }else{
87 return m_rear->data;
88 }
89 }
90 bool Queue::empty(){
91 if(m_front == m_rear){
92 return true;
93 }else
94 return false;
95 }
96 bool Queue::full(){
97 if(m_sum < SUM){
98 return false;
99 }else
100 return true;
101 }
102
103 int main(){
104 Queue que;
105 int ret;
106
107 que.pop();
108 que.push(1);
109 que.push(2);
110
111 que.pop();
112 if((ret = que.front()) != -1){
113 cout << "队列头元素是:"<< ret <<endl;
114 }
115 if((ret = que.back()) != -1){
116 cout << "队列尾元素是:" << ret <<endl;
117 }
118 que.push(3);
119 que.push(4);
120 que.push(5);
121
122 if((ret = que.front()) != -1){
123 cout << "队列头元素是:"<< ret <<endl;
124 }
125 if((ret = que.back()) != -1){
126 cout << "队列尾元素是:" << ret <<endl;
127 }
128
129 return 0;
130
131 }