1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| #include"MyQueue.h" #include<assert.h> #include<stdio.h> #include<stdlib.h>
void Init_MyQueue(MyQueue* pmyq) { InitStack(&pmyq->s1); InitStack(&pmyq->s2); } Status Push_MyQueue(MyQueue* pmyq, ElemType val) { return Push_Stack(&pmyq->s1, val); } Status Pop_MyQueue(MyQueue* pmyq, ElemType* pval) { if (!StackEmpty(&pmyq->s2)) { return Pop_Stack(&pmyq->s2, pval); } else { int val; while(!StackEmpty(&pmyq->s1)) { Pop_Stack(&pmyq->s1, &val); Push_Stack(&pmyq->s2, val); } if (StackEmpty(&pmyq->s2)) { return FALSE; } else { return Pop_Stack(&pmyq->s2, pval); } } } Status Front_MyQueue(MyQueue* pmyq, ElemType* pval) { if (!StackEmpty(&pmyq->s2)) { return GetTop_Stack(&pmyq->s2, pval); } else { int val; while (!StackEmpty(&pmyq->s1)) { Pop_Stack(&pmyq->s1, &val); Push_Stack(&pmyq->s2, val); } if (StackEmpty(&pmyq->s2)) { return FALSE; } else { return GetTop_Stack(&pmyq->s2, pval); } } } int Get_Length_MyQueue(MyQueue* pmyq) { return StackLength(&pmyq->s1) + StackLength(&pmyq->s2); } bool Is_Empty_MyQueue(MyQueue* pmyq) { return Get_Length_MyQueue(pmyq) == 0; } void Clear_MyQueue(MyQueue* pmyq) { ClearStack(&pmyq->s1); ClearStack(&pmyq->s2); } void Destroy_MyQueue(MyQueue* pmyq) { DestroyStack(&pmyq->s1); DestroyStack(&pmyq->s2); } void Show_MyQueue(MyQueue* pmyq) { StackNode* p = pmyq->s1.top->next; p = pmyq->s1.top->next; while (p != NULL) { printf("%d ", p->data); p = p->next; }
LinkStack s3; InitStack(&s3); p = pmyq->s2.top->next; while (p != NULL) { Push_Stack(&s3, p->data); p = p->next; }
p = s3.top->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); }
|