@@ -171,6 +171,10 @@ int linkQueueDequeue(LinkQueue *link_queue, int *value) {
171
171
return 0 ;
172
172
}
173
173
174
+ int linkQueueIsEmpty (LinkQueue * link_queue ) {
175
+ return LINK_QUEUE_IS_EMPTY (link_queue );
176
+ }
177
+
174
178
void linkQueueDump (LinkQueue * link_queue ) {
175
179
LinkQueueNode * node = link_queue -> head ;
176
180
int index = 0 ;
@@ -224,8 +228,107 @@ void testLinkQueue() {
224
228
linkQueueDestroy (link_queue );
225
229
}
226
230
231
+ typedef struct {
232
+ LinkQueue * main_queue ;
233
+ LinkQueue * temp_queue ;
234
+ } QueueStack ;
235
+
236
+ QueueStack * queueStackCreate () {
237
+ QueueStack * queue_stack = (QueueStack * )malloc (sizeof (QueueStack ));
238
+ if (queue_stack == NULL ) {
239
+ return NULL ;
240
+ }
241
+
242
+ queue_stack -> main_queue = linkQueueCreate ();
243
+ queue_stack -> temp_queue = linkQueueCreate ();
244
+
245
+ return queue_stack ;
246
+ }
247
+
248
+ int queueStackPush (QueueStack * queue_stack , int value ) {
249
+ int main_dequeue_value ;
250
+ while (!LINK_QUEUE_IS_EMPTY (queue_stack -> main_queue )) {
251
+ int res = linkQueueDequeue (queue_stack -> main_queue , & main_dequeue_value );
252
+ if (res == 0 ) {
253
+ linkQueueEnqueue (queue_stack -> temp_queue , main_dequeue_value );
254
+ }
255
+ }
256
+
257
+ int res = linkQueueEnqueue (queue_stack -> main_queue , value );
258
+
259
+ int temp_dequeue_value ;
260
+ while (!LINK_QUEUE_IS_EMPTY (queue_stack -> temp_queue )) {
261
+ int res = linkQueueDequeue (queue_stack -> temp_queue , & temp_dequeue_value );
262
+ if (res == 0 ) {
263
+ linkQueueEnqueue (queue_stack -> main_queue , temp_dequeue_value );
264
+ }
265
+ }
266
+
267
+ return res ;
268
+ }
269
+
270
+ int queueStackPop (QueueStack * queue_stack , int * value ) {
271
+ return linkQueueDequeue (queue_stack -> main_queue , value );
272
+ }
273
+
274
+ int queueStackPeek (QueueStack * queue_stack ) {
275
+ return queue_stack -> main_queue -> head -> data ;
276
+ }
277
+
278
+ int queueStackIsEmpty (QueueStack * queue_stack ) {
279
+ return linkQueueIsEmpty (queue_stack -> main_queue );
280
+ }
281
+
282
+ void queueStackDump (QueueStack * queue_stack ) {
283
+ linkQueueDump (queue_stack -> main_queue );
284
+ }
285
+
286
+ void queueStackDestroy (QueueStack * queue_stack ) {
287
+ linkQueueDestroy (queue_stack -> main_queue );
288
+ linkQueueDestroy (queue_stack -> temp_queue );
289
+ free (queue_stack );
290
+ }
291
+
292
+ void testStackUseQueue () {
293
+ QueueStack * queue_stack = queueStackCreate ();
294
+ if (queue_stack == NULL ) {
295
+ printf ("queue stack create failed\n" );
296
+ return ;
297
+ }
298
+
299
+ for (int i = 0 ; i < 4 ; i ++ ) {
300
+ int res = queueStackPush (queue_stack , i );
301
+ if (res < 0 ) {
302
+ printf ("queue stack push value failed\n" );
303
+ }
304
+ }
305
+ queueStackDump (queue_stack );
306
+
307
+ int value ;
308
+ int res = queueStackPop (queue_stack , & value );
309
+ if (res < 0 ) {
310
+ printf ("queue stack pop failed\n" );
311
+ } else {
312
+ printf ("queue stack pop value = %d\n" , value );
313
+ }
314
+ queueStackDump (queue_stack );
315
+
316
+ value = queueStackPeek (queue_stack );
317
+ printf ("queue stack top value = %d\n" , value );
318
+
319
+ int is_empty = queueStackIsEmpty (queue_stack );
320
+ printf ("queue stack is empty %d\n" , is_empty );
321
+
322
+ queueStackDestroy (queue_stack );
323
+ }
324
+
325
+ void testQueueUseStack () {
326
+
327
+ }
328
+
227
329
int main () {
228
330
// testLinkStack();
229
- testLinkQueue ();
331
+ // testLinkQueue();
332
+ testStackUseQueue ();
230
333
return 0 ;
231
334
}
0 commit comments