C语言实现队列

该博客介绍了用C语言实现队列的方法。队列是先进先出的数据结构,给出了在Visual 2008的C++下编译的代码,包含队列数据类型定义、入队和出队函数,以及主函数实现用户选择入队或出队操作并给出相应提示。

队列:先进先出的一种数据结构。

代码在Visual 2008的C++下编译的,如下:

typedef struct
{
    HRINT32U pAddr;
}MyQueue;//队列数据类型
#define  MaxNum 10 //队列最大容量10
MyQueue m_queue[MaxNum];//队列数组
HRINT8U InputAddr = 0;//入队地址
HRINT8U OuputAddr = 0;//出队地址
HRINT8U NowNum = 0;//当前队列总数
/*
  * 描述     :入队
  * 函数名:HRINT8U Insert_Queue(MyQueue *pInAddr)
  * 输入        :pInAddr 队列指针
  * 输出        :0-插入成功,1-失败(队列已满)
*/
HRINT8U Insert_Queue(MyQueue *pInAddr)
{
    if(NowNum >= MaxNum)//判断队列是否存满
    {
        return 1;
    }
    else
    {
        //do nothing
    }
    m_queue[InputAddr++] = *pInAddr;
    if(InputAddr >= MaxNum)
    {
        InputAddr = 0;
    }
    else
    {
        //do nothing
    }
    NowNum++;
    return 0;
}
/*
  * 描述     :出队
  * 函数名:HRINT8U Insert_Queue(MyQueue *pInAddr)
  * 输入        :pInAddr 队列指针
  * 输出        :0-出队成功,1-失败(队列为空)
*/
HRINT8U Out_Queue(MyQueue *pOutAddr)
{
    if(NowNum == 0)//判断队列是否为空
    {
        return 1;
    }
    else
    {
        //do nothing
    }
    *pOutAddr = m_queue[OuputAddr++];
    if(OuputAddr >= MaxNum)
    {
        OuputAddr = 0;
    }
    else
    {
        //do nothing
    }
    NowNum--;
    return 0;
}

void main()
{
    HRINT8U i;
    HRINT8U SelectNum;
    MyQueue InputTest;
    while(1)
    {
        printf("\n请输入数字选择相应的操作:1入队 2出队\n");
        scanf("%d",&SelectNum);
        switch (SelectNum)
        {
        case 1:
            printf("\n请输入插入队列的值:");
            scanf("%ld",&InputTest.pAddr);
            if(!Insert_Queue((MyQueue *)&InputTest))
            {
                printf("\n插入队列成功!\n");
            }
            else
            {
                printf("\n队列已满!\n");
            }
            break;
        case 2:
            printf("\n当前入队位置%d,当前出队位置%d\n",InputAddr,OuputAddr);
            printf("当前队列的内容如下\n");
            for(i=0;i<MaxNum;i++)
            {
                printf("%ld  ",m_queue[i].pAddr);
            }
            if(!Out_Queue((MyQueue *)&InputTest))
            {
                printf("\n出队成功!\n");
                printf("\n出队值%ld\n",InputTest.pAddr);
            }
            else
            {
                printf("\n队列为空!\n");
            }
            break;
        default:
            printf("无此操作!!!");
        }    
    }
    system("pause");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值