#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Qnode; //定义节点;
typedef struct Qnode
{
Qnode*front;
Qnode*rear;
}Queue; //定义首尾指针
//初始化
void Init(Queue*q)
{
q->front=NULL;
q->rear=NULL;
}
//判断队列是否已满
int Isempty(Queue*q)
{
return q->front==NULL;
}
//入队列
void InQueue(Queue*q,int X)
{
Qnode*newnode=(Qnode*)malloc(sizeof(Qnode));
newnode->data=X;
newnode->next=NULL;
if(q->rear==NULL)
{
q->front=newnode;
q->rear=newnode; //判断队列是否为空,如果是则将新建立的节点直接放在首尾指针的后面,否则执行下一步
}
q->rear->next=newnode;
q->rear=newnode; //此处也可以写成q->rear=q->rear->next;意为着将q->rear后移一位;
}
// 出队列
int OutQueue(Queue*q)
{
if(Isempty(q))
{
printf("队列已空!\n");
}
int X=q->front->data;
Qnode temp=q->front; //定义一个节点代替当前节点
q->front=q->front->next; //当前节点后移一位
free(temp); //释放当前结点
return X; //返回当前结点的值
}
void PrintQueue(Queue*q)
{
if(Isempty(q))
printf("队列已空!\n");
while(q->front!=NULL)
{
printf("%d ",q->front->data); //当当前位置的指针不指向空结点时输出当前节点的数据
q->front=q->front->next; //当前位置的指针后移
}
}
int main()
{
Queue q;
Init(&q);
InQueue(&q,10);
InQueue(&q,20);
InQueue(&q,30);
OutQueue(&q);
PrintQueue(&q);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复