栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

队列代码及思路详解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

队列代码及思路详解

队列代码及思路详解

如有错误,敬请指正

#include
#include
typedef struct Queue
{
int *pbase;//用于创建数组下标,与内存的分配,主导指针指向,相当于 a[i]中的a[]
int front;//队头
int rear;//队尾
}QUEUE;
void init(QUEUE * Q);//初始化 ,注意各函数 的参数类型是队列指针
void traverse_Queue(QUEUE * Q);//输出各元素
bool empty_Queue(QUEUE * Q);//判断是否为空
bool full_Queue(QUEUE * Q);//判断是否为满
bool in_Queue(QUEUE * Q,int val);//元素入队
void out_Queue(QUEUE * Q,int val);//元素出队
int main()
{
int val;//用于接收出队的元素
QUEUE Q;//创建一个队列类型的变量
init(&Q);
//21-24为入队元素
in_Queue(&Q,1);
in_Queue(&Q,2);
in_Queue(&Q,3);
in_Queue(&Q,4);
traverse_Queue(&Q);
//27-28为出对元素
out_Queue(&Q,&val);
out_Queue(&Q,&val);
traverse_Queue(&Q);
return 0;
}
/

初始化:申请一块内存,还有大小 ,队头队尾置0
/
void init(QUEUE * Q)
{
Q->pbase=(int
)malloc(sizeof(int)6);//相当于创建了a[],注意:后面是int * 类型
Q->rear=0;//
Q->front=0;
}
/

输出:定义一个参数,使其指向队头,
注意:不能Q->front=(Q->front+1)%6,否则队头变化,相当于删除元素
/
void traverse_Queue(QUEUE * Q)
{
int i=Q->front;
while(i!=Q->rear)
{
printf("%d",Q->pbase[i]);
i++;
}
printf("n");
}
/

判断是否为空:根据front和rear的含义,若相等则为空
/
bool empty_Queue(QUEUE * Q)
{
if(Q->front==Q->rear)
return true;
else
return false;
}
/

判断是否满:因为是循环队列,故若rear的下一个是front就满
/
bool full_Queue(QUEUE * Q)
{
if(Q->front==(Q->rear+1)%6)
return true;
else
return false;
}
/

入队:先将该元素放入rear对应的下标中,之后将rear后移。因为rear指的一直都是该队最后一个有效元素后面的位置,故直接放入rear的就可
/
bool in_Queue(QUEUE * Q,int val)
{
if(full_Queue(Q))
{
printf(“数据已满,放入数据失败!n”);
}
else
{
Q->pbase[Q->rear]=val;
Q->rear=(Q->rear+1)%6;
}
}
/

出队:将该元素先保存,之后front后移即可,若再次使用该空间,使用后续元素将其覆盖
*/
void out_Queue(QUEUE * Q,int *val)
{
*val=Q->pbase[Q->front];
printf(“刚刚出列的元素为:%d”,*val);
Q->front=(Q->front+1)%6;
printf("n");
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/291473.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号