队列
程序员文章站
2022-07-09 13:48:57
...
头文件
typedef enum{FALSE = 0, TRUE} BOOL;
typedef int Data;
typedef struct node
{
Data data;
struct node *next;
}Node;
typedef struct queue
{
//Node *list;//考虑头指针空不空,头结点不用考虑
Node *front;
Node *rear;
}Queue;
//初始化队列
void Init(Queue *s);
//判断空队列
BOOL Empty(Queue *s);
//入队列
void Push(Queue *s, Data data);
//出队列
void Pop(Queue *s);
//获取队头元素
Data GetTop(Queue *s);
#endif
函数
#include "queue.h"
#include <stdlib.h>
//初始化队列
void Init(Queue *q)
{
if (NULL == q)
return;
q->front = NULL;
}
//判断空队列
BOOL Empty(Queue *q)
{
if (NULL == q)
return FALSE;
if(q->front == NULL)
return TRUE;
return FALSE;
}
//入队列
void Push(Queue *q, Data data)
{
if (NULL == q)
return;
Node *node = (Node*)malloc(sizeof(Node)/sizeof(char));
node->data = data;
if(NULL == q->rear)
{
q->rear = node;
q->front = node;
}
else
{
q->rear->next = node;
q->rear = node;
}
}
//出队列
void Pop(Queue *q)
{
if (NULL == q)
return;
if(Empty(q) == TRUE)
return;
Node *tmp =q->front;
q->front = tmp->next;
free(tmp);
if(NULL == q->front)
{
q->rear = NULL;
}
}
//获取队头元素
Data GetTop(Queue *q)
{
if (NULL == q)
return;
if (Empty(q) == TRUE)
exit(-1); //程序退出
return q->front->data;
}
主函数
#include <stdio.h>
#include "queue.h"
int main()
{
Queue(q);//创建队列
Init(&q);//初始化队列
int i;
for (i = 0; i < 10; i++)
{
Push(&q, i);//入队列
}
while(!Empty(&q))
{
Data data = GetTop(&q);//取栈顶数据
printf("%d ",data);
Pop(&q);//一个一个出栈
}
printf("\n");
return 0;
}