两个栈实现一个队列

来源:互联网 发布:windows 远程桌面 打开 编辑:程序博客网 时间:2024/04/30 17:32
#include <stdio.h> #include <string.h>#include <stdlib.h>#include "stack.h"/*思路:入队的放stack1,出队从stack2出,如果stack2为空,则先将stack1的内容依次压入stack2中*//*出队,返回出队的值的指针!*/int* dequeue(t_stack *s1, t_stack *s2){int *p_value;if(!s1 || !s2)return NULL;if(s2->top == 0){/*stack2为空,先将stack1中内容弹出并压入stack2中*/while(s1->top){p_value = (int *)(s1->pop(s1));s2->push(s2, (void *)p_value, sizeof(int));}}p_value = (int *)(s2->pop(s2));return p_value;}/*入队,成功返回0, 失败返回-1*/int enqueue(t_stack *s1, t_stack *s2, int value){if(!s1 || !s2)return -1;return s1->push(s1, (void *)&value, sizeof(int));}int main(int argc, char *argv[]){t_stack *s1, *s2;s1 = init_stack();if(!s1)return -1;s2 = init_stack();if(!s2)return -1;printf("空队列出队测试: %s\n", NULL == dequeue(s1, s2) ? "OK" : "NOK");printf("入队测试,入队值1: %s\n", 0 == enqueue(s1, s2, 1) ? "OK" : "NOK");printf("入队测试,入队值2: %s\n", 0 == enqueue(s1, s2, 2) ? "OK" : "NOK");printf("入队测试,入队值3: %s\n", 0 == enqueue(s1, s2, 3) ? "OK" : "NOK");int *value;value = dequeue(s1, s2);printf("出队测试,期望值1, 实际值%d: %s\n", *value, 1==*value ? "OK" : "NOK");value = dequeue(s1, s2);printf("出队测试,期望值2, 实际值%d: %s\n", *value, 2==*value ? "OK" : "NOK");printf("入队测试,入队值4: %s\n", 0 == enqueue(s1, s2, 4) ? "OK" : "NOK");value = dequeue(s1, s2);printf("出队测试,期望值3, 实际值%d: %s\n", *value, 3==*value ? "OK" : "NOK");value = dequeue(s1, s2);printf("出队测试,期望值4, 实际值%d: %s\n", *value, 4==*value ? "OK" : "NOK");s1->destory(&s1);s2->destory(&s2);return 0;}


队列的实现在上一篇文章

0 0
原创粉丝点击