码迷,mamicode.com
首页 > 其他好文 > 详细

双端队列的应用

时间:2015-07-26 09:48:59      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:线性表   队列   

双端队列是一种特殊队列,它是在线性表的两端对插入和删除操作限制的线性表。双端队列可以在队列的任何一端进行插入删除操作。
#include <stdio.h>  
#define QUEUESIZE 8  
typedef char ElemType;  
typedef struct DQueue  
{  
    ElemType queue[QUEUESIZE];  
    int end1;  
    int end2;  
}DQueue;  
  
int EnQueue(DQueue *DQ,ElemType e,int tag);  
int DeQueue(DQueue *DQ,ElemType *e,int tag);  



#include "DQ.h"  
  
int EnQueue(DQueue *DQ,ElemType e,int tag)  
{  
    switch(tag)  
    {  
    case 1:  
        if(DQ->end1 != DQ->end2)  
        {  
            DQ->queue[DQ->end1] = e;  
            DQ->end1 = (DQ->end1-1)%QUEUESIZE;  
            return 1;  
        }  
        else  
        {  
            return 0;  
        }  
        break;  
    case 2:  
        if(DQ->end1 != DQ->end2)  
        {  
            DQ->queue[DQ->end2] = e;  
            DQ->end2 = (DQ->end2+1)%QUEUESIZE;  
            return 1;  
        }  
        else  
        {  
            return 0;  
        }  
        break;  
    }  
    return 0;  
}  
  
int DeQueue(DQueue *DQ,ElemType *e,int tag)  
{  
    switch(tag)  
    {  
    case 1:  
        if((DQ->end1+1)%QUEUESIZE != DQ->end2)  
        {  
            DQ->end1 = (DQ->end1+1)%QUEUESIZE;  
            *e = DQ->queue[DQ->end1];  
            return 1;  
        }  
        else  
        {  
            return 0;  
        }  
        break;  
    case 2:  
        if((DQ->end2-1)%QUEUESIZE != DQ->end1)  
        {  
            DQ->end2 = (DQ->end2-1)%QUEUESIZE;  
            *e = DQ->queue[DQ->end2];  
            return 1;  
        }  
        else  
        {  
            return 0;  
        }  
        break;  
    }  
    return 0;  
}  




#include "DQ.h"  
//利用顺序存储结构实现双端队列的入队和出队操作  
int main(void)  
{  
    DQueue Q;  
    char ch;  
    Q.end1 = 3;  
    Q.end2 = 4;  
    if(!EnQueue(&Q,'a',1))  
    {  
        printf("队列已满,不能入队!");  
    }  
    else  
    {  
        printf("a左端入队:\n");  
    }  
    if(!EnQueue(&Q,'b',1))  
    {  
        printf("队列已满,不能入队!");  
    }  
    else  
    {  
        printf("b左端入队:\n");  
    }  
        if(!EnQueue(&Q,'c',1))  
    {  
        printf("队列已满,不能入队!");  
    }  
    else  
    {  
        printf("c左端入队:\n");  
    }  
        if(!EnQueue(&Q,'d',2))  
    {  
        printf("队列已满,不能入队!");  
    }  
    else  
    {  
        printf("d右端入队:\n");  
    }  
        if(!EnQueue(&Q,'e',2))  
    {  
        printf("队列已满,不能入队!");  
    }  
    else  
    {  
        printf("e右端入队:\n");  
    }  
    printf("队列左端出队一次:");  
    DeQueue(&Q,&ch,1);  
    printf("%c\n",ch);  
    printf("队列左端出队一次:");  
    DeQueue(&Q,&ch,1);  
    printf("%c\n",ch);  
    printf("队列右端出队一次:");  
    DeQueue(&Q,&ch,2);  
    printf("%c\n",ch);  
    printf("队列右端出队一次:");  
    DeQueue(&Q,&ch,2);  
    printf("%c\n",ch);  
    return 0;  
}  

运行结果如下:

技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。

双端队列的应用

标签:线性表   队列   

原文地址:http://blog.csdn.net/weichanjuan3/article/details/47065137

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!