1 //基本线性队列
2 #include<iostream>
3
4 using namespace std;
5
6 typedef struct _NODE_
7 {
8
9 int a;
10 _NODE_* pNext;
11 }Node,*pNode;
12
13
14 class CQueue
15 {
16 private:
17 pNode m_pTop;
18 pNode m_pBase;
19 int iNodeCount;
20
21
22 public:
23 CQueue()
24 {
25
26 m_pTop = m_pBase = NULL;
27 iNodeCount = 0;
28 }
29
30 ~CQueue()
31 {
32
33 }
34
35 bool IsEmpty();
36 void InitQueue();
37 bool InQueue(int a);
38 bool OutQueue(int& a);
39 void DestroyQueue();
40 bool GetQueueLenth(int& a);
41 bool GetQueueTop(int& a);
42
43
44 };
45
46
47 bool CQueue::GetQueueLenth(int& a)
48 {
49 a = iNodeCount;
50
51 return true;
52 }
53 bool CQueue::GetQueueTop(int& a)
54 {
55 a = m_pTop->a;
56
57 return true;
58 }
59
60
61
62 bool CQueue::IsEmpty()
63 {
64 if(iNodeCount == 0)
65 {
66 return true;
67 }
68
69 return false;
70
71 }
72 void CQueue::InitQueue()
73 {
74 if(!IsEmpty())
75 {
76 DestroyQueue();
77 }
78
79 m_pTop = m_pBase = NULL;
80 iNodeCount = 0;
81 }
82
83 bool CQueue::InQueue(int a)
84 {
85 pNode pNodeTemp = new Node;
86
87 if(pNodeTemp != NULL)
88 {
89 pNodeTemp->a = a;
90 pNodeTemp->pNext = NULL;
91
92 if(m_pTop == NULL)
93 {
94 m_pTop = m_pBase = pNodeTemp;
95 }
96 else
97 {
98 m_pBase->pNext = pNodeTemp;
99
100 m_pBase = pNodeTemp;
101 }
102
103 iNodeCount++;
104
105 return true;
106 }
107 return false;
108
109 }
110
111
112 bool CQueue::OutQueue(int& a)
113 {
114 if(m_pTop == NULL)
115 {
116 return false;
117 }
118 else
119 {
120 pNode pNodeTemp = m_pTop;
121
122 m_pTop =m_pTop->pNext;
123
124 a = pNodeTemp->a;
125
126 delete pNodeTemp;
127
128 iNodeCount--;
129
130 if(iNodeCount == 0)
131 {
132 m_pBase = NULL;
133 }
134
135 return true;
136 }
137 }
138 void CQueue::DestroyQueue()
139 {
140 pNode pNodeDel = m_pTop;
141
142 while(pNodeDel != NULL)
143 {
144
145 m_pTop = m_pTop->pNext;
146
147 delete pNodeDel;
148
149 pNodeDel = m_pTop;
150
151 iNodeCount--;
152 }
153
154 m_pTop = m_pBase = NULL;
155 iNodeCount = 0;
156 }
157
158
159
160
161 int main()
162 {
163
164
165 CQueue One;
166
167 One.InitQueue();
168
169 int i = 0;
170 int iTemp = 0;
171 int iLenth = 0;
172 int iTop = 0;
173 int a[10] = {13,25,33,15,658,3,97,60,26,16};
174
175 printf("基本队列操作:\n\n");
176 if(One.IsEmpty())
177 {
178 printf("目前队列中为空\n");
179 }
180
181 printf("\n进队:\n");
182 for(i=0;i<10;i++)
183 {
184 One.InQueue(a[i]);
185 printf("%d ",a[i]);
186 }
187
188 if(!One.IsEmpty())
189 {
190 printf("\n\n目前队列中有数据\n");
191 }
192 printf("\n\n");
193
194
195 One.GetQueueLenth(iLenth);
196 printf("队列长度: %d\n\n",iLenth);
197
198 One.GetQueueTop(iTop);
199 printf("队列的头: %d\n\n",iTop);
200
201 printf("出队:\n");
202
203 for(i=0;i<10;i++)
204 {
205 One.OutQueue(iTemp);
206 printf("%d ",iTemp);
207 }
208 printf("\n");
209
210 if(One.IsEmpty())
211 {
212 printf("\n目前队列中为空\n");
213 }
214
215
216
217
218 return 0;
219 }