[数据结构] 用C语言模拟一个简单的队列程序

#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<math.h>

//队列长度自定义
#define ASIZE 1001
#define MAX_INT 2147483647

typedef struct quque {
    int data[ASIZE];
    int front;
    int rear;
}Queue;

//空0,满-1,正常 1
int notEmpty(Queue *queue)
{
    if ((*queue).front == (*queue).rear)
        return 0;
    else if ( ((*queue).rear+1)%ASIZE == (*queue).front )
        return -1;
    else return 1;
}

//测量队列长度
int lengthOfQueue (Queue (*queue))
{
    if ((*queue).rear >= (*queue).front)
        return (*queue).rear-(*queue).front;
    else return (*queue).rear + ASIZE - (*queue).front;
}

//push
void pushToQueue(Queue (*queue), int one)
{
    if (notEmpty(queue) == -1)
    {
        printf("⚐队列已满,无法PUSH");
        return;//队满
    }
    (*queue).data[(*queue).rear] = one;
    (*queue).rear = ((*queue).rear +1)%ASIZE;
}

//pop,队空返回max_int
int popFromQueue(Queue (*queue))
{
    if (!notEmpty(queue))
    {
        printf("⚐队列为空,无法POP");
        return MAX_INT;
    }
    int pop = (*queue).data[(*queue).front];
    (*queue).front = ((*queue).front + 1)%ASIZE;
    return pop;
}
//仅读取队首,不出队
int readTopOfQueue(Queue (*queue))
{
    if (notEmpty(queue))
    return (*queue).data[(*queue).front];
    else
    {
        printf("⚐队列为空,无法读取");
        return -1;
    }
}
//创建队列
Queue* creatAQueue()
{
    Queue *queue = (Queue *)malloc(sizeof(Queue));
    (*queue).front = 0;
    (*queue).rear = 0;
    return queue;
}

//打印队列
void printQueue(Queue (*queue))
{
    if ((*queue).front == (*queue).rear)
    {
        printf("\n⚐队列为空\n");
        return;
    }
    printf("\n队首的下标为 %d ,队尾的下标为 %d \n队列为:",(*queue).front,(*queue).rear);
    for (int i = (*queue).front ; i != (*queue).rear ; i = (i+1)%ASIZE )
    {
        printf (" %d ",(*queue).data[i]);
    }
    printf("\n");
}

int main()
{
    Queue *queue = creatAQueue();
    int order;
    int one;
    while (1) {
        printf("\n☀︎命令:1-进行入队操作,2-进行出队操作,3-打印队列\n✎请输入指令:");
        scanf("%d",&order);
        switch (order) {
            case 1:
                printf("\n✎请输入需要入队的数值:");
                scanf("%d",&one);
                if (notEmpty(queue) == -1)
                {
                    printf("\n⚐队列已满\n");
                    break;
                }
                pushToQueue(queue,one);
                break;
            case 2:
                if (notEmpty(queue) == 0)
                {
                    printf("\n⚐队列还是空的哟~\n");
                    break;
                }
                one = popFromQueue(queue);
                printf("\n出队的数据为%d\n",one);
                break;
            case 3:
                printQueue(queue);
                break;
            default:
                printf("\n⚐指令有误\n");
                break;
        }
    }
    return 0;
}

 

posted @ 2018-03-13 14:41  Oran  阅读(473)  评论(0编辑  收藏  举报