数据结构---基于顺序存储结构实现的双端队列
双端队列:左右两端都可以进行入队和出队操作
实现方式:循环数组
操作:
(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;//非满
}