数据结构---基于顺序存储结构实现的双端队列

发布于:2025-09-16 ⋅ 阅读:(19) ⋅ 点赞:(0)

双端队列:左右两端都可以进行入队和出队操作

实现方式:循环数组

操作:
(1)初始化

#include<stdio.h>
#include<stdlib.h>
#define maxx 20
//双端队列
typedef struct 
{
    int *data;
    int left;
    int right;
    int sum;//标记是否已满
}DouQueue;
//初始化
DouQueue* InitDouQueue()
{
    DouQueue* dq = (DouQueue*)malloc(sizeof(DouQueue));
    if(dq == NULL)
    {
        printf("内存申请失败\n");
        return NULL;
    }
    dq->data = (int*)malloc(sizeof(int)*maxx);
    if(dq == NULL)
    {
        printf("内存申请失败\n");
        return NULL;
    }
    dq->left = 0;
    dq->right = 0;
    dq->sum = 0;
    return dq;
}

(2)左端入队

//左端入队
void LeEnQueue(DouQueue* dq,int k)
{
    if(dq->sum == maxx)
    {
        printf("队列已满\n");
        return;
    }
    dq->data[dq->left] = k;
    dq->left = (dq->left - 1 + maxx) % maxx;
    dq->sum++;
}

(3)左端出队

//左端出队
void LeDeQueue(DouQueue* dq)
{
    if(dq->sum == 0)
    {
        printf("队列为空\n");
        return ;
    }
    int x = dq->data[dq->left];
    printf("%d出队\n");
    dq->left = (dq->left+1)%maxx;
    dq->sum--;

}

(4)右端入队

//右端入队
void RiEnQueue(DouQueue* dq,int k)
{
    if(dq->sum == maxx)
    {
        printf("队列已满\n");
        return;
    }
    dq->data[dq->right] = k;
    dq->right = (dq->right+1) % maxx;
    dq->sum++;
}

(5)右端出队

//右端出队
void RiDeQueue(DouQueue* dq)
{
    if(dq->sum == 0)
    {
        printf("队列为空\n");
        return;
    }
    int x = dq->data[dq->right];
    dq->right = (dq->right-1) % maxx;
    dq->sum--;
}

(6)判空

//判空
int isEmpty(DouQueue* dq)
{
    if(dq->sum == 0)
    {
        return 1;//空
    }
    return 0;//非空
}

(7)判满

//判满
int isFull(DouQueue* dq)
{
    if(dq->sum == maxx)
    {
        return 1;//满
    }
    return 0;//非满
}