#include <stdio.h>
#include <stdlib.h>
//队列的基本使用 尾进头出
#define true 1
#define false 0
#define QueueElemType int
//队列的定义
typedef struct Node{
QueueElemType data;
struct Node * next;
}LinkQueueNode;
//这里我对于指针的理解是LinkQueueNode *S和*LinkQueue S是等价的,如果有错误希望告知,感谢
typedef struct node{
LinkQueueNode *head;//头结点
LinkQueueNode *rear;//尾结点
}*LinkQueue;
//队列的初始化
int InitLinkQueue(LinkQueue Q){
Q = (LinkQueueNode *)malloc(sizeof (LinkQueueNode));//分配内存空间
if(!Q->head) {
Q->head = Q->rear;
Q->head->next = NULL;//很好理解的想法
return true;
} else{
return false;//不正确
}
}
//队列的入队操作
int EnterQueue(LinkQueue Q, QueueElemType x) {
LinkQueueNode *p;
p = (LinkQueueNode *)malloc(sizeof (LinkQueueNode));//分配内存空间
if(!p){
p->data = x;
p->next = NULL;//队尾插入
Q->rear->next = p;
Q->rear = p;//队尾插入改变尾指针结点
return true;
} else {
return false;
}
}
//队列的出队操作
int OutQueue(LinkQueue Q, QueueElemType *x) {//需要传出实参
LinkQueueNode *p;
if(Q) {//队列为空时
return false;
} else {
*x = Q->head->next->data;
p = Q->head->next;//将第一个结点(不是头结点)命名为另一个名字p(这里只是我的理解,并不一定正确)
Q->head->next = p->next;//出队操作
if(Q->rear == p) {//当一个元素的队列出队时,出对后这个队列为空
Q->rear == Q->head;
}
free (p);
}
}
//主函数可用来测试各个功能
int main() {
return 0;
}
链式队列的基本使用
最新推荐文章于 2023-02-28 18:12:12 发布