#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} LinkNode;
typedef struct {
LinkNode *front, *rear;
} LinkQueue;
// 带头结点
int InitQueue(LinkQueue *q) {
q->front = q->rear = (LinkNode *)malloc(sizeof(LinkNode));
if (q->front == NULL) return -1;
q->front->next = NULL;
return 1;
}
// 带头结点
int EnQueue(LinkQueue *q, int e) {
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
if (s == NULL) return -1;
q->rear->next = s;
q->rear = s;
s->next = NULL;
s->data = e;
return 1;
}
// 带头结点
int DeQueue(LinkQueue *q, int *e) {
if (q->front == q->rear) return -1;
LinkNode *p = q->front->next;
*e = p->data;
q->front->next = p->next;
if (q->rear == p) {
q->rear = q->front;
}
free(p);
return 1;
}
// 不带头结点
int InitQueue1(LinkQueue *q) {
q->front = q->rear = NULL;
return 1;
}
// 不带头结点
int EnQueue1(LinkQueue *q, int e) {
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
if (s == NULL) return -1;
s->next = NULL;
s->data = e;
if (q->front == NULL) {
q->front = s;
q->rear = s;
} else {
q->rear->next = s;
q->rear = s;
}
return 1;
}
// 不带头结点
int DeQueue1(LinkQueue *q, int *e) {
if (q->front == NULL) return -1;
LinkNode *p = q->front;
q->front = p->next;
*e = p->data;
if (q->rear == p) {
q->front = NULL;
q->rear = NULL;
}
free(p);
return 1;
}
// 带头结点
int Empty(LinkQueue q) {
if (q.front == q.rear) return 1;
else return -1;
}
// 不带头结点
int Emptyq(LinkQueue q) {
if (q.front == NULL) return 1;
else return -1;
}
int main() {
LinkQueue q;
InitQueue(&q);
return 0;
}
链式队列
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Java实现队列——顺序队列、链式队列 概念 先进者先出,这就是典型的“队列”。(First In, First ...
- 一.简介 在哔哩哔哩看视频学的,赫斌老师数据结构入门的内容-b站搜索:av6159200(P47),通过学习循环队...