/*队列没完全看懂*/
#include <stdio.h>
#include <stdlib.h>
#define Datatype int
//定义节点结构
typedef struct node{
Datatype data;
struct node *next;
}QueueNode;
//定义头节点
typedef struct{
QueueNode *front;
QueueNode *rear;
}LinkQueue;
//初始化链队列,头节点置空
void InitQueue(LinkQueue *Q)
{
Q->front = Q->rear = NULL;
}
//判断链队列是否为空
int QueueEmpty(LinkQueue *Q)
{
return(Q->front == NULL && Q->rear == NULL);
}
//入队
void EnLinkQueue(LinkQueue *Q, Datatype v)
{
QueueNode *p;
p = (QueueNode *)malloc(sizeof(QueueNode));//为新的节点分配空间
p->data = v;
p->next = NULL;
if(QueueEmpty(Q))
Q->front = Q->rear = p;
else
{
Q->rear->next = p; //将新的节点连接到队列
Q->rear = p; //指向队列尾
}
}
//出队
Datatype DeLinkQueue(LinkQueue *Q)
{
Datatype i;
QueueNode *s;
if(QueueEmpty(Q)) //判断队列是否为空
printf("Error,the linkqueue is empty!");
s = Q->front;
i = s->data;
if(Q->front == Q->rear) //判断队列是否只有一个节点
Q->front = Q->rear = NULL;
else
Q->front = s->next;
free(s);
return i;
}
//读取队列头元素,不改变队列状态
Datatype ReadLinkQueue(LinkQueue *Q)
{
Datatype i;
if(QueueEmpty(Q)) //判断队列是否为空
printf("Error,the linkqueue is empty!");
i = Q->front->data;
return i;
}
int main()
{
LinkQueue Q;
Datatype i = 1;
InitQueue(&Q);
while(i<=6)
{
EnLinkQueue(&Q,i); //将1-6入队
i++;
}
printf("DeLinkQueue: %d\n", DeLinkQueue(&Q));
printf("DeLinkQueue: %d\n", DeLinkQueue(&Q));
printf("ReadLinkQueue: %d\n", ReadLinkQueue(&Q));
printf("ReadLinkQueue: %d\n", ReadLinkQueue(&Q));
EnLinkQueue(&Q,9);
printf("The all number of the linkqueue:\n");
while(!QueueEmpty(&Q))
printf("%d\t",DeLinkQueue(&Q)); //输出队列中所有数据
return 0;
}
数据结构--链队列
最新推荐文章于 2022-05-17 18:43:39 发布