您的位置:首页 > 编程语言 > C语言/C++

环形队列的基本运算实现

2017-11-09 15:04 260 查看

#include <stdio.h>

#include <malloc.h>

#define MaxSize 100

typedef char ElemType;

typedef struct

{

    ElemType data[MaxSize];

    int top;                    //栈指针

}SqStack;

void IniStack(SqStack *&s)      //初始化

{

    s=(SqStack *)malloc(sizeof(SqStack));

    s->top=-1;

}

void DestoryStack(SqStack *&s)

{

    free(s);

}

bool StackEmpty(SqStack *s)    //判断是否为空

{

    return (s->top==-1);

}

bool Push(SqStack *&s,ElemType e)

{

    if(s->top==MaxSize-1)       //栈满

        return false ;

    s->top++;

    s->data[s->top]=e;

    return true;

}

bool Pop(SqStack *s,ElemType e)

{

    if(s->top==-1)        //栈空

        return false;

    e=s->data[s->top];

    return true;

}

int main()

{

    ElemType e;

    SqStack *q;

    printf("环形队列基本运算如下:\n");

    printf("(1)初始化队列q\n");

    IniStack(q);

    printf("(2)依次进队列元素a,b,c\n");

    if(!Push(q,'a'))

        printf("\t提示:队满,不能进队\n");

    if(!Push(q,'b'))

        printf("\t提示:队满,不能进队\n");

    if(!Push(q,'c'))

        printf("\t提示:队满,不能进队\n");

    printf("(3)队列为%s\n",(StackEmpty(q)?"空":"非空"));

    if(Pop(q,e)==0)

        printf("队空,不能出队\n");

    else

        printf("(4)出队一个元素%c\n",e);

    printf("(5)依次进队列元素d,e,f\n");

    if(!Push(q,'d'))

        printf("\t提示:队满,不能进队\n");

    if(!Push(q,'e'))

        printf("\t提示:队满,不能进队\n");

    if(!Push(q,'f'))

        printf("\t提示:队满,不能进队\n");

    printf("(6)出队序列\n");

    while (!StackEmpty(q))

    {

        Pop(q,e);

        printf("%c",e);

    }

    printf("\n");

    printf("(7)释放队列\n");

    DestoryStack(q);

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 编程