标签:des style blog http strong os
原理:假设有两个栈分别叫stack1,stack2。那么入队操作就是向stack1中push元素,出队操作就是将stack1中的所有元素pop出来,然后push到stack2中,对stack2进行pop操作。
用两个栈来实现一个队列,完成队列的Push和Pop操作。
队列中的元素为int类型。
每个输入文件包含一个测试样例。
对于每个测试样例,第一行输入一个n(1<=n<=100000),代表队列操作的个数。
接下来的n行,每行输入一个队列操作:
1. PUSH X 向队列中push一个整数x(x>=0)
2. POP 从队列中pop一个数。
对应每个测试案例,打印所有pop操作中从队列pop中的数字。如果执行pop操作时,队列为空,则打印-1。
3 PUSH 10 POP POP
10 -1
/********************************* 两个栈实现队列 by Rowandjj 2014/7/21 *********************************/ #include<iostream> #include<stdlib.h> #include<string.h> using namespace std; typedef struct _NODE_ { int data; struct _NODE_ *next; }Node,*pNode; typedef struct _STACK_ { pNode head; int size; }Stack,*pStack; typedef struct _QUEUE_ { Stack s1; Stack s2; }Queue,*pQueue; void InitStack(pStack ps) { ps->head = (pNode)malloc(sizeof(Node)); if(!ps->head) { exit(-1); } ps->size = 0; ps->head->next = NULL; } void push(pStack ps, int data) { if(ps == NULL) { return; } pNode pNew = (pNode)malloc(sizeof(Node)); if(!pNew) { return; } pNew->data = data; pNew->next = ps->head->next; ps->head->next = pNew; ps->size++; } void pop(pStack ps,int *data) { if(ps == NULL) { *data = -1; return; } pNode pDel = ps->head->next; if(pDel != NULL) { *data = pDel->data; ps->head->next = pDel->next; free(pDel); ps->size--; }else { *data = -1; return; } } int Stack_Size(pStack ps) { if(ps == NULL) { return -1; } return ps->size; } void InitQueue(pQueue pq) { InitStack(&(pq->s1)); InitStack(&(pq->s2)); } //入队 void Enqueue(pQueue pq,int data) { if(pq == NULL) { return; } push(&(pq->s1),data); } //出队 int Dequeue(pQueue pq) { if(Stack_Size(&(pq->s2)) <= 0) { while(Stack_Size(&(pq->s1)) > 0) { int temp; pop(&(pq->s1),&temp); push(&(pq->s2),temp); } } if(Stack_Size(&(pq->s2)) == 0) { return -1; } int data; pop(&(pq->s2),&data); return data; } void DestroyStack(pStack ps) { if(ps == NULL) { return; } int data; while(Stack_Size(ps) != 0) { pop(ps,&data); } free(ps->head); } void DestroyQueue(pQueue pq) { if(pq == NULL) { return; } DestroyStack(&(pq->s1)); DestroyStack(&(pq->s2)); } int main() { Queue q; InitQueue(&q); const char* push = "PUSH"; const char* pop = "POP"; char input[5]; int n,i,data; cin>>n; for(i = 0; i < n; i++) { cin>>input; if(strcmp(input,push) == 0) { cin>>data; Enqueue(&q,data); } if(strcmp(input,pop) == 0) { cout<<Dequeue(&q)<<endl; } } DestroyQueue(&q); return 0; }
标签:des style blog http strong os
原文地址:http://blog.csdn.net/chdjj/article/details/38013039