队列是一种先进先出的数据结构,在写队列的代码时,建议先对链表的操作有所掌握。在这里实现一种链表式的队列。
// queue2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
typedef struct QNode
{
int data;
QNode *next;
}QNode;
typedef struct Liqueue
{
QNode *front;
QNode *rear;
}Liqueue;
void initQueue(Liqueue *queue)
{
queue->front = queue->rear = (QNode *)malloc(sizeof(QNode));
queue->front = queue->rear = NULL;
}
bool idEmpty(Liqueue *queue)
{
if(queue->front == NULL || queue->rear == NULL)
{
return 1;
}
else return 0;
}
//进队列
void insertQueue(Liqueue *queue, int data)
{
QNode *node = (QNode *)malloc(sizeof(QNode));
node->data = data;
node->next = NULL;
if(queue->rear == NULL)
{
queue->rear = queue->front = node; //如果是第一个节点
}
else
{
queue->rear->next = node;
queue->rear = node;
}
}
int popQueue(Liqueue *queue, int *data)
{
QNode *node = queue->front;
if(queue->front == NULL || queue->rear ==NULL) //控队列
return 0;
if(queue->front == queue->rear){
queue->front = queue->rear = NULL;
}else{
queue->front = queue->front->next;
}
*data = node->data;
free(node);
return 1;
}
//遍历队列
void transQueue(Liqueue queue)
{
int i = 1;
QNode *p = queue.front;
while(p != NULL ){
printf("节点 : %d\n",p->data);
i++;
p = p->next;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
Liqueue queue;
initQueue(&queue);
insertQueue(&queue, 0);
insertQueue(&queue, 1);
insertQueue(&queue,2);
insertQueue(&queue, 3);
transQueue(queue);
int tt;
popQueue(&queue,&tt);
printf("队尾取出1条数据 %d\n",tt);
transQueue(queue);
system("pause");
return 0;
}
执行结果: