数据结构----------------顺序队列的定义及基本操作的实现

#include<stdio.h>
#define MaxSize 10


typedef int ElemType;

/*                           结构体定义                                          */
typedef struct{
    ElemType data[MaxSize];
    int front;//队头指针
    int rear;//队尾指针
}SqQueue;

/*                           初始化操作                                          */
void init(SqQueue *Queue)
{
    Queue->front = 0;
    Queue->rear  = 0;
}

/*                           销毁操作                                          */
void destory(SqQueue *Queue)//顺序表自动回收。只需要将队头、队尾指针指向初始位置即可
{
    Queue->front = 0;
    Queue->rear = 0;
}

/*                           判空操作                                          */
int isempty(SqQueue Queue)
{
    if (Queue.rear == Queue.front)
        return 1;//队列为空
    else
        return -1;//队列非空
}

/*                           判满操作                                          */
int isfull(SqQueue Queue)
{
    if ((Queue.rear+1)%MaxSize == Queue.front)
        return 1;//队列已满
    else
        return -1;//队列不满
}

/*                           输出操作                                          */
void display(SqQueue Queue)
{
    if (Queue.rear == Queue.front) //队列为空
    {
        printf("队列为空,不能进行输出操作\n");
        return;
    }
    else{
        int i = Queue.front;
        printf("队列元素:\n");
        while (i != Queue.rear)
        {
            printf("Queue[%d] = %d\n",i,Queue.data[i]);
            i = (i+1)%MaxSize;
        }
    }
    printf("\n");
}

/*                           入队操作                                          */
int push(SqQueue *Queue,int x)//队尾入队
{
    if ((Queue->rear + 1)%MaxSize == Queue->front)//判断队列是否已满
        return -1;
    else{
        Queue->data[Queue->rear] = x;
        Queue->rear = (Queue->rear+1)%MaxSize; //逻辑上的循环队列,重复利用出队后的空间
    }
    return 1;
}

/*                           出队操作                                          */
int pop(SqQueue *Queue,int *popNum)//队头出队
{
    if (Queue->rear == Queue->front) // 队列为空
        return -1;
    else{
        *popNum = Queue->data[Queue->front];
        Queue->front = (Queue->front+1)%MaxSize;//队头指针后移
    }
    return 1;
}

/*                           取队头元素操作                                          */
int peek(SqQueue Queue,int *num)
{
    if (Queue.rear == Queue.front)//空队
        return -1;
    else
        *num = Queue.data[Queue.front];
    return 1;
}

/*                           主函数                                          */
int main()
{
    SqQueue Queue;
    init(&Queue);

    int flag = 1;//循环变量
    while (flag != -1)
    {
        printf("\n");
        printf("---------------请选择你的操作-----------------\n");
        printf("\n");
        printf("1.元素入队\n");
        printf("2.元素出队\n");
        printf("3.取队头元素\n");
        printf("4.判空操作\n");
        printf("5.判满操作\n");
        printf("6.输出操作\n");
        printf("7.销毁操作\n");
        printf("8.退出\n");
        printf("\n");
        printf("--------------------------------------------\n");

        int a = 0;
        scanf("%d",&a);

        //入队所需参数
        int x = 0;
        int pushflag = 0;

        //出队所需参数
        int popNum = 0;
        int popflag = 0;

        //取队头所需参数
        int peekNum = 0;
        int peekflag = 0;

        //判空所需参数
        int isemptyflag = 0;

        //判满所需参数
        int isfullflag = 0;

        switch (a)
        {
        case 1: printf("请输入你想入队的元素:\n");
                scanf("%d",&x);
                pushflag = push(&Queue,x);
                if (pushflag == 1)
                    printf("入队成功\n");
                else
                    printf("入队失败\n");
            break;
        case 2: popflag = pop(&Queue,&popNum);
                if (popflag == -1)
                    printf("出队失败,队列为空\n");
                else
                    printf("出队成功,出队的元素为:%d\n",popNum);
            break;
        case 3: peekflag = peek(Queue,&peekNum);
                if (peekflag == -1)
                    printf("取队头元素失败,队列为空\n");
                else
                    printf("取队头元素成功,队头元素为:%d\n",peekNum);
            break;
        case 4: isemptyflag = isempty(Queue);
                if (isemptyflag == 1)
                    printf("队列为空\n");
                else
                    printf("队列非空\n");
            break;
        case 5: isfullflag = isfull(Queue);
                if (isfullflag == 1)
                    printf("队列已满\n");
                else
                    printf("队列非满\n");
            break;
        case 6: display(Queue);
            break;
        case 7: destory(&Queue);
            break;
        case 8: flag = -1;break;
        default:flag = -1;
            break;
        }
    }
}

运行结果如下图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值