队列

    技术2022-05-20  58

    IsEmpty判断空,EnQueue入队,(栈是push,不过没有什么大的区别)。DeQueue出队。其核心数据也是很相似,也有一个数据区域nData,不过他是队头nHand和队尾nTail。对头定位着将要出队的元素,队尾对应着入队的元素。#include <stdio.h>#include <stdlib.h>#include <assert.h>//定义一个队列的结构体struct MyQueue {    int nTail;    //队列尾    int nHead;  //队列头    int nData[10];    //队列数据};//规则说明://nHead 直接指向了对头的数据位置,//nTail 直接指向了队尾要插入的位置,//如果nTail==nHead ,队列为空//nTail 比 nHead位置小一,(就是在他前面一个),代表队满//所以数组中能存放的数据要比数组的空间小1,是为了判断队列满的情况。MyQueue g_queue;        //定义全局的队列//判断队列是否为空bool IsEmpty(void){    return (g_queue.nHead == g_queue.nTail);        //如果尾等于头,则为空}//设置队列为空int SetEmpty(void){    g_queue.nTail = 0;        //都设置为零    g_queue.nHead = 0;    return 1;}//判断队列是否为满bool IsFull(void){    //如果ntial 比 nHead小1,则栈满。    return (g_queue.nTail + 1% 10 == g_queue.nHead;    }//入队int EnQueue(int nData){    assert(!IsFull());        //assert表示断言,断言!IsFull成立,如果不成立,则报告程序错误!    g_queue.nData[g_queue.nTail] = nData;    g_queue.nTail = (g_queue.nTail + 1% 10;    return (g_queue.nTail - g_queue.nHead) % 10;}//出队int DeQueue(void){    assert(!IsEmpty());    int nData = g_queue.nData[g_queue.nHead];    g_queue.nHead = (g_queue.nHead + 1% 10;    return nData;}int main(){    //测试    SetEmpty();            //设置队列为空    if (IsEmpty())        //判断为空,输出信息    {        printf("The queue is empty!/n");    }    //    for (int i = 0; i < 9++i)    {        EnQueue(i);    }    if (IsFull())                //判断队列满    {        printf("The Queue is full/n");        //栈满的英语是不是full啊    }    for (int i = 0; i < 9++i)                //出队    {        printf("%d ", DeQueue());                }    printf("/n");    if (IsEmpty())                            {        printf("The queue is empty!/n");    }    for (int i = 0; i < 8++i)            //测试出队和入队    {        EnQueue(i);        EnQueue(i*2);        printf("%d ", DeQueue());    }    printf("/n");    while(!IsEmpty())    {        printf("%d ", DeQueue());    }    printf("/n");    system("pause");    return 0;}


    最新回复(0)