/*
输入n个数据给队列
对队列遍历 依次出队输出
运行示意:
Please input the number you want:3
Please input in turn:
1
2
3
Queue's length:3
1 2 3
Queue's head:1
1 2 3
Queue's length:0
*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// 队列的节点
struct Node
{
int data;
struct Node* next;
};
// 队首队尾指针
struct Queue
{
struct Node* front;
struct Node* rear;
int size;
};
// 初始化队列
void QueueInit(struct Queue* queue)
{
queue->front = NULL;
queue->rear = NULL;
queue->size = 0;
}
// 判断队列空否
int QueueEmpty(struct Queue* queue)
{
return (queue->size == 0);
}
// 入队
void QueuePush(struct Queue* queue, const int data) //对数据 data 入队操作 queue
{
struct Node* node; //创建新节点
node = (struct Node*)malloc(sizeof(struct Node));
assert(node != NULL);
node->data = data; //对新节点赋值
node->next = NULL; //
if(QueueEmpty(queue))
{
queue->front = node;
queue->rear = node;
}
else
{
queue->rear->next = node;
queue->rear = node;
}
++queue->size; //队列长度+1
}
//出队
int QueuePop(struct Queue* queue, int* data) //对queue出队操作 返回值给 data
{
if (QueueEmpty(queue))
{
return 0;
}
struct Node* tmp = queue->front;
*data = queue->front->data;
queue->front = queue->front->next;
free(tmp);
--queue->size;
return 1;
}
//销毁队列
void QueueDestroy(struct Queue* queue)
{
struct Node* tmp;
while(queue->front)
{
tmp = queue->front;
queue->front = queue->front->next;
free(tmp);
}
}
//Get the length得到队列长度
int QueueLen(struct Queue* queue)
{
return(queue->size);
}
//TraversalQueue遍历队列元素
void QueueTraverse(struct Queue* queue)
{
if (QueueEmpty(queue))
{printf("It is empty.");}
else{
struct Node* tmp=queue->front;
while(tmp)
{ int data=tmp->data;
printf("%d ",data);
tmp=tmp->next;
}
}
}
//Get Queue's head 返回队列头元素
int QueueHead(struct Queue* queue)
{
if (QueueEmpty(queue))
{
return 0;
}
else{
struct Node* tmp=queue->front;
return(tmp->data);
}
}
int main(void)
{
struct Queue queue; //创建队列 queue
QueueInit(&queue); //初始化
printf("Please input the number you want:");
int n;scanf("%d",&n); //输入n个数据到队列
printf("Please input in turn:\n");
for (int i=0; i<n; i++)
{ int m;scanf("%d",&m);
QueuePush(&queue, m);
}
printf("Queue's length:%d\n",QueueLen(&queue));
QueueTraverse(&queue);printf("\n");
printf("Queue's head:%d\n",QueueHead(&queue));
while (!QueueEmpty(&queue)) //出队每个元素并输出
{ int e;
QueuePop(&queue, &e);
printf("%d ", e);
}
printf("\nQueue's length:%d",QueueLen(&queue));
printf("\n");
return 0;
}
二叉树部分操作
最新推荐文章于 2023-09-18 15:23:50 发布