/*
双端队列deque,可在两端插入、删除。
有MAX+1个位置(MAX个可用)
*/
#include<stdio.h>
#define MAX 6
typedef char ElemType;
typedef int bool;
struct DEQUE{
int head;//指向第一个元素,初值0
int tail;//指向最后元素的下一个位置,初值0
ElemType q[MAX+1];
}DQ;
void warning(char*s)
{
puts(s);
}
bool full()//deque是否满
{
return DQ.tail+1==DQ.head||(DQ.tail==MAX&&DQ.head==0);
}
bool empty()//deque是否空
{
return DQ.head==DQ.tail;
}
void pushfront(ElemType elem)//头端插入
{
if(full()) warning("full!");
else{
if(DQ.head==0) DQ.head=MAX;
else DQ.head--;
DQ.q[DQ.head]=elem;
}
}
void popfront()//头端删除
{
if(empty()) warning("empty!");
else{
if(DQ.head==MAX) DQ.head=0;
else DQ.head++;
}
}
ElemType frontelem()//头端元素
{
return DQ.q[DQ.head];
}
void pushback(ElemType elem)//尾端插入
{
if(full()) warning("full!");
else{
DQ.q[DQ.tail]=elem;
if(DQ.tail==MAX) DQ.tail=0;
else DQ.tail++;
}
}
void popback()//尾端删除
{
if(empty()) warning("empty!");
else{
if(DQ.tail==0) DQ.tail=MAX;
else DQ.tail--;
}
}
ElemType backelem()//尾端元素
{
return DQ.tail==0?DQ.q[MAX]:DQ.q[DQ.tail-1];
}
void traverse()
{
int i;
printf("QUEUE:");
for(i=DQ.head;i!=DQ.tail;i==MAX?(i=0):i++)
putchar(DQ.q[i]);
putchar('\n');
printf("ARRAY:");
for(i=0;i<=MAX;i++)
putchar(DQ.q[i]);
putchar('\n');
}
int main(void)
{
DQ.head=DQ.tail=0;
popfront();
pushfront('a');
traverse();
popback();
traverse();
pushback('z');
pushback('y');
putchar(backelem());
traverse();
pushfront('a');
pushfront('b');
pushfront('c');
pushfront('d');
putchar(frontelem());
traverse();
pushback('w');
pushfront('e');
traverse();
popback();
popfront();
popfront();
traverse();
popback();
popback();
traverse();
popback();
popback();
return 0;
}
10.1-5 双端队列deque
最新推荐文章于 2025-07-22 09:45:43 发布
