#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
}QueueNode;
typedef struct {
QueueNode *front;
QueueNode *rear;
}Queue;
void Init(Queue *q);
bool IsEmpty(Queue *q);
void Enter(Queue *q, ElemType e);
void Depart(Queue *q, ElemType *e);
void GetHeader(Queue *q, ElemType *e);
void Print(Queue *q);
void Clear(Queue *q);
void Init(Queue *q)
{
q->front = q->rear = NULL;
}
bool IsEmpty(Queue *q)
{
return (q->front == q->rear) ? true : false;
}
void Enter(Queue *q, ElemType e)
{
QueueNode *node = (QueueNode *)malloc(sizeof(QueueNode));
if (node)
{
if (NULL == q->front)
{
q->front = q->rear = node;
node->data = e;
node->next = NULL;
return;
}
node->data = e;
node->next = NULL;
q->rear->next = node;
q->rear = node;
}
}
void Depart(Queue *q, ElemType *e)
{
if (q->front == q->rear)
return;
QueueNode *temp = q->front;
*e = temp->data;
q->front = temp->next;
free(temp);
}
void GetHeader(Queue *q, ElemType *e)
{
if (!IsEmpty(q))
*e = q->front->data;
}
void Print(Queue *q)
{
QueueNode *p = q->front;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void Clear(Queue *q)
{
QueueNode *p = q->front;
while (p)
{
QueueNode *temp = p;
p = p->next;
free(temp);
}
q->front = q->rear = NULL;
}
int main()
{
Queue q;
Init(&q);
for(int i = 1; i <= 20; ++i)
Enter(&q, i);
Print(&q);
ElemType e;
Depart(&q, &e);
printf("出队一次,出队元素为:%d\n", e);
GetHeader(&q, &e);
printf("此时队首元素为:%d\n", e);
Clear(&q);
printf("清空该队列,此时");
if(IsEmpty(&q))
printf("队列为空\n");
else
printf("队列不为空\n");
return 0;
}
链式队列的实现
最新推荐文章于 2017-02-26 10:40:28 发布