用堆栈实现队列
2014-04-21 13:31
176 查看
头文件“qs.h”
函数实现“qs.c”
测试用例“qs_test.c”
/* 基于堆栈的队列 */ #ifndef _QS_H #define _QS_H #include "sl.h" /* 队列 */ typedef struct Queue { STACK is; /* 输入栈 */ STACK os; /* 输出栈 */ } QUEUE; /* 初始化为空队列 */ void queue_init (QUEUE* queue); /* 释放剩余节点并恢复到初始状态 */ void queue_deinit (QUEUE* queue); /* 判断是否空 */ int queue_empty (QUEUE* queue); /* 压入 */ void queue_push (QUEUE* queue, int data); /* 弹出 */ int queue_pop (QUEUE* queue); /* 队首 */ int queue_front (QUEUE* queue); /* 数量 */ size_t queue_size (QUEUE* queue); #endif /* _QS_H */
函数实现“qs.c”
/* 基于堆栈的队列 */ #include "qs.h" /* 初始化为空队列 */ void queue_init (QUEUE* queue) { stack_init (&queue->is); stack_init (&queue->os); } /* 释放剩余节点并恢复到初始状态 */ void queue_deinit (QUEUE* queue) { stack_deinit (&queue->is); stack_deinit (&queue->os); } /* 判断是否空 */ int queue_empty (QUEUE* queue) { return stack_empty (&queue->is) &&stack_empty (&queue->os); } /* 压入 */ void queue_push (QUEUE* queue, int data) { stack_push (&queue->is, data); } /* 弹出 */ int queue_pop (QUEUE* queue) { if (stack_empty (&queue->os)) while (! stack_empty (&queue->is)) stack_push (&queue->os,stack_pop (&queue->is)); return stack_pop (&queue->os); } /* 队首 */ int queue_front (QUEUE* queue) { if (stack_empty (&queue->os)) while (! stack_empty (&queue->is)) stack_push (&queue->os,stack_pop (&queue->is)); return stack_top (&queue->os); } /* 数量 */ size_t queue_size (QUEUE* queue) { return stack_size (&queue->is) +stack_size (&queue->os); }
测试用例“qs_test.c”
/* 基于堆栈的队列 */ #include <stdio.h> #include "qs.h" /* 测试用例 */ int main (void) { QUEUE queue; queue_init (&queue); int i; for (i = 0; i < 10; ++i) queue_push (&queue, i); for (i = 0; i < 5; ++i) printf ("%d ", queue_pop (&queue)); for (i = 10; i < 15; ++i) queue_push (&queue, i); while (! queue_empty (&queue)) printf ("%d ", queue_pop (&queue)); printf ("\n"); queue_deinit (&queue); return 0; }
相关文章推荐
- Java基础课程学习总结,使用LinkedList简单模拟队列数据结构和堆栈数据结构的实现
- JS~js里实现队列与堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用堆栈(Stack)来模拟队列(FIFO)功能,要求数据必须存储在堆栈内部.需要实现enqueue(入栈),dequeue(出栈),isEmpty(判空)三个功能,并给出单元测试.
- 用堆栈的方式实现队列
- PHP基于数组实现的堆栈和队列功能示例
- LeetCode学习之-232. 利用堆栈实现队列(Implement Queue using Stacks)
- c++实现两个堆栈模拟一个队列
- 回文字(堆栈和队列实现)
- java集合框架:浅谈如何使用LInkedList实现队列(Queue)和堆栈(Stack)
- 多态实现线性表(队列,串,堆栈)
- JavaScript队列或者堆栈的实现
- JavaScript数组实现数据结构中的队列与堆栈
- 用python实现堆栈和队列
- java通过LinkedList实现堆栈和队列数据结构
- 试用多态实现线性表(队列,串,堆栈),要求具备线性表的基本操作:插入,删除,测长等。
- 数据结构面试题:两个队列实现一个堆栈
- Java中链表、堆栈、队列、二叉树、散列表等数据结构的实现
- 线性表、堆栈、队列的实现总结
- 程序员面试题精选(48):两个堆栈模拟队列c++代码实现