队列:先进先出的一种数据结构。
代码在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");
}