天天看點

兩個棧實作一個隊列

#include<stdio.h>  

bool STACK_EMPTY(int &top)  

{  

    if(top==0)  

        return true;  

    else  

        return false;  

}  

void PUSH(int *S,int x,int &top)  

    top=top+1;  

    S[top]=x;  

int POP(int *S,int &top)  

    if(STACK_EMPTY(top))  

        return -1;  

        top=top-1;  

    return S[top+1];  

void Transfer(int *S1,int &top1,int *S2,int &top2)//從棧S1中将元素轉移到棧S2中  

    int p;  

    while(top1>=1)  

    {  

        p=POP(S1,top1);  

        PUSH(S2,p,top2);  

    }  

void main()  

    int S1[10],S2[10];  

    int top1=0,top2=0;  

//壓棧S1,相當于進隊列。  

    PUSH(S1,1,top1);  

    PUSH(S1,2,top1);  

    PUSH(S1,3,top1);  

    PUSH(S1,4,top1);  

    PUSH(S1,5,top1);  

//如果要出隊列,則需要将棧S1中的元素全部轉移到棧S2中,然後讓棧S2出棧的元素就是隊列的元素。  

    Transfer(S1,top1,S2,top2);  

    int p=POP(S2,top2);  

    printf("%d/n",p);  

    /* 

    如果一直出棧則不需要再次轉移,但是如果又有元素需要進隊列,則需要再次進行Transfer()操作 

    S1負責元素進隊列,S2負責元素出隊列。 

    */  

本文轉自xwdreamer部落格園部落格,原文連結:http://www.cnblogs.com/xwdreamer/archive/2011/01/03/2297051.html,如需轉載請自行聯系原作者