采用链式存储结构的队列。可以理解为特殊的单链表,只允许在一端插入,另一端删除
在这里插入代码片#include <iostream>
using namespace std;
#define ElemType int
typedef struct LinkNode {
ElemType data;
struct LinkNode *next;
} LinkNode;
typedef struct {
LinkNode *front, *rear;
int length;
} LinkQueue;
void Init(LinkQueue &queue) {
queue.front = queue.rear = (LinkNode *) malloc(sizeof(LinkNode));
queue.front->next = nullptr;
queue.length = 0;
}
bool IsEmpty(LinkQueue L) {
return L.length == 0;
// return L.front == L.rear;
}
bool EnQueue(LinkQueue &L, int e) {
LinkNode *p = (LinkNode *) malloc(sizeof(LinkNode));
p->data = e;
p->next = nullptr;
L.rear->next = p;
L.rear = p;
L.length++;
return true;
}
//注意不带头结点的情况,不带头结点时删除第一个元素
bool DeQueue(LinkQueue &L, int &e) {
if (IsEmpty(L))
return false;
LinkNode *delNode = L.front->next;
e = delNode->data;
L.front->next = delNode->next;
//判断此时删除的结点是否为最后一个结点
if (delNode == L.rear)
L.rear = L.front;
free(delNode);
L.length--;
return true;
}
int main() {
return 0;
}