队列的基本操作包括队列的初始化,遍历,入队,出队,得到队头元素,获取队列的长度等等
首先定义队列的节点
// 队列的节点
struct Node
{
int data;
struct Node* next;
};
定义队首,队尾指针
// 队首队尾指针
struct Queue
{
struct Node* front;
struct Node* rear;
int size;
};
完整代码如下:
#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)//入队
{
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;
}
int QueuePop(struct Queue* queue, int* 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;
}
int GetHead(struct Queue* queue)//得到对头元素
{
if( queue->front!= queue->rear)
return queue->front->data;
}
void QueueLength(struct Queue* queue)//得到队列的长度
{
int len = 0;
Node *p = queue->front->next;
while (p)
{
len++;
p = p->next;//获取队列的长度
}
}
void QueueTraverse(struct Queue* queue)//遍历队列
{
Node* p=queue->front->next;
while(p)
{
printf("%d",p->next);
p=p->next;
}
printf("%n");
}
void QueueDestroy(struct Queue* queue)//销毁队列
{
struct Node* tmp;
while(queue->front)
{
tmp = queue->front;
queue->front = queue->front->next;
free(tmp);
}
}
int main( )
{
struct Queue queue;
QueueInit(&queue);
int i,n;
scanf("%d",&n);
for (i=0; i<n; i++)
{
QueuePush(&queue, i);
}
while (!QueueEmpty(&queue))
{
QueuePop(&queue, &i);
printf("%d ", i);
}
printf("\n");
return 0;
}