|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 圣狄雅哥 于 2018-2-8 22:01 编辑
#define MaxDQsize 20
typedef int ElemType
typedef int Status
typedef struct{
Elemtype *base;
int front;
int rear;
Status tag;
}DQueue;
Status InitDQueue(DQueue *q)
{
q->base=(ElemType*)malloc(MaxDQsize *sizeof(ElemType));
if(!q->base) return FALSE;
q->front=q->rear=0;
q->tag=0;
return OK;
}
Status EnDQueue(DQueue *q,ElemType e,int k) // k用于选择是在尾部入队还是头部入队
{
if(q->front==q->rear&&q->tag) return FALSE;
if(q->front==q->rear&&!q->tag)
{
q->base[q->rear]=e;
q->rear=(q->rear+1)%MaxDQsize;
if(q->rear==q->front) //队列空间只有一个存储位置时
q->tag=1;
}
else{
if(k==0) //插入在对头
{
q->front=(q->front+MaxDQsize -1)%MaxDQsize ; // 此处头指针正好移到了其前一个位置
q->base[q->front]=e;
if(q->rear==q->front)
q->tag=1;
}
else if(k==1) //插入在对尾
{
q->base[q->rear]=e;
q->rear(q->rear+1)%MaxDQsize ;
if(q->rear==q->front)
q->tag=1;
}
}
return OK;
}
Status DeDQueue(DQueue *q,ElemType*e)
{
if(q->front==q->rear&&!q->tag) return FALSE;
else{
*e=q->base[q->front];
q->front=(q-><front+1)%MaxDQsize;
if(q->front==q->rear)
q->tag=0;
}
return OK;
} |
|