您的位置:首页 > 其它

两个栈实现一个队列

2016-01-04 22:22 267 查看
#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;
}


队列的实现在上一篇文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  队列