剑指offer 面试题7 两个栈实现队列
2014-07-14 20:56
477 查看
E:\arithmetic\StackToQueue
s1负责装新的,s2负责倒出来,当s2为空时,要将完全s1倒到s2后再 pop s2
s1负责装新的,s2负责倒出来,当s2为空时,要将完全s1倒到s2后再 pop s2
#include <stdio.h> #include "Stack.h" typedef struct queue{ Stack *s1; Stack *s2; }Queue; Queue* createQueue(){ Queue *q = malloc(sizeof(Queue)); q->s1= createStack(); q->s2= createStack(); return q; } void appendQueue(Queue *q, int n){ pushStack(q->s1, n); } int deleteQueue(Queue *q){ if(isEmpty(q->s2)){ while(!isEmpty(q->s1)){ int t ; t = popStack(q->s1); pushStack(q->s2, t); } } return popStack(q->s2); } int main(int argc, char *argv[]) { int a[] = {1,2,3,4,5,6,7,8,9,0 }; Queue *q = createQueue(); int i; for(i=0 ; i < sizeof(a)/sizeof(int) ; i++){ appendQueue(q, a[i]); } int n; for(i=0 ; i < sizeof(a)/sizeof(int) ; i++){ n = deleteQueue(q); printf("%d\t", n); } printf("\n"); return 0; }
//stack.h #ifndef STACK_H_H #define STACK_H_H #include <stdio.h> #include <stdlib.h>//molloc free typedef struct LinkNode { int value; struct LinkNode *next; }Node, *NodeLink; typedef struct NodeStack{ Node *top; }Stack; Stack* createStack(); int isEmpty(Stack *s); void pushStack(Stack *s, int n); int popStack(Stack *s); void printStack(Stack *s); #endif
//stack.c #include "Stack.h" Stack* createStack(){ Stack *s = malloc(sizeof(Stack)); s->top = NULL; return s; } int isEmpty(Stack *s){ return s->top==NULL ? 1:0; } void pushStack(Stack *s, int n){ Node *t = malloc(sizeof(Node)); t->value = n; t->next = s->top; s->top = t; } int popStack(Stack *s){ if(isEmpty(s)){ printf("Stack is empty! quit!\n"); return -1;//?? } int n = s->top->value; Node *t = s->top; s->top= t->next; free(t); return n; } void printStack(Stack *s){ Node *t = s->top; while(t != NULL){ printf("%d\t", t->value); t = t->next; } }
相关文章推荐
- 《剑指Offer》面试题:用两个队列实现一个栈
- 剑指offer-面试题7:用两个栈实现队列
- 剑指Offer---面试题:使用两个栈实现队列
- 剑指Offer:面试题7——用两个栈实现队列(java实现)
- 剑指offer面试题7——用两个栈实现队列
- 剑指offer 面试题7 两个栈实现队列 java版答案
- 《剑指Offer》面试题-用两个栈实现队列
- 剑指Offer系列-面试题7:用两个栈实现队列
- 《剑指offer》面试题七 用两个栈实现队列
- (剑指Offer)面试题7:用两个栈实现队列
- 《剑指Offer》学习笔记--面试题7:用两个栈实现队列
- 剑指offer面试题之用两个栈实现队列
- 《剑指Offer》面试题七之用两个栈实现队列
- 剑指offer《面试题7:用两个栈实现队列》及用两个队列实现一个栈
- 面试题07_用两个栈实现队列——剑指offer系列
- 剑指offer 面试题7:用两个栈实现队列 题解
- 剑指offer面试题7——用两个栈实现队列
- 《剑指Offer》面试题-用两个栈实现队列
- 剑指offer-面试题7-用两个栈实现队列
- 剑指Offer(第二版)面试题9:用两个栈实现队列