阅读背景:

用双队列模拟栈及用栈逆置队列

来源:互联网 

双队列模拟栈的基本操作

#include<stdio.h>
#include<stdlib.h>
#define maxsize 30
typedef int datatype;
typedef struct{
    datatype data[maxsize]; 
    int front,rear;
}SeqQueue;
//置空栈 
void Initial(SeqQueue *q1,SeqQueue *q2){
    q1->front= 0,q1->rear = 0;
    q2->front = 0,q2->rear= 0;
} 

int QueueIsEmpty(SeqQueue *q){
    return q->rear == q->front; 
}

int QueueIsFull(SeqQueue *q){
    return q->front ==(q->rear+1)%maxsize;
}

int EnQueue(SeqQueue *q,datatype x){
    if(QueueIsFull(q))
       return 0;
    q->data[q->rear++] = x;
    return 1;
}

int DeQueue(SeqQueue *q,datatype *x){
    if(QueueIsEmpty(q))
       return 0;
       *x = q->data[q->front];
    q->front = (q->front+1)%maxsize;
    return 1;
}

//判断栈空 
int StackIsEmpty(SeqQueue *q1,SeqQueue *q2){
    return QueueIsEmpty(q1)&&QueueIsEmpty(q2);
}
//判断栈满 
int StackIsFull(SeqQueue *q1,SeqQueue *q2){
    return QueueIsFull(q1)||QueueIsFull(q2);
}

//进栈 
int StackPush(SeqQueue *q1,SeqQueue *q2,datatype x){
    if(StackIsFull(q1,q2))
       return 0;
    if(StackIsEmpty(q1,q2))
       EnQueue(q1,x);
    if(!QueueIsEmpty(q1))
       EnQueue(q1,x);
    if(QueueIsEmpty(q1))
       EnQueue(q2,x);
       return 1;
}

//出栈 
int StackPop(SeqQueue *q1,SeqQueue *q2,datatype *x){
    if(StackIsEmpty(q1,q2))    //判断栈空 
       return 0;
    if(!QueueIsEmpty(q1)){     //若q1不为空 
        while(!QueueIsEmpty(q1)){   
            DeQueue(q1,x);     //出q1 
            EnQueue(q2,*x);    //进q2
        }
     }
    else                       //若q1为空 
         while(!QueueIsEmpty(q2)){
            DeQueue(q2,x);     //出q2 
            EnQueue(q1,*x);    //进q1 
         } 
    return 1;
} #include<stdio.h>
#include<stdlib.



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: