10.1-5 双端队列deque

来源:互联网 发布:linux shell执行exe 编辑:程序博客网 时间:2024/05/20 16:14
/*双端队列deque,可在两端插入、删除。有MAX+1个位置(MAX个可用)*/#include<stdio.h>#define MAX 6typedef 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;}

0 0
原创粉丝点击