add LinkQueue.c

main
lwy 2 years ago
parent f4f585d901
commit fe6ba4f5e2

@ -5,6 +5,7 @@ typedef struct ListNode {
int data; int data;
struct ListNode *next; struct ListNode *next;
} ListNode; } ListNode;
//typedef ListNode *LinkList; //typedef ListNode *LinkList;
//LinkList head; //LinkList head;
//ListNode *p; //ListNode *p;

@ -0,0 +1,61 @@
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data; // 存储队列元素
struct Node *next; // 指向下一个节点的指针
} QNode, *QueuePtr;
typedef struct {
QueuePtr front; // 队列头指针,指向队列头节点
QueuePtr rear; // 队列尾指针,指向队列尾节点的下一个位置
} LinkQueue;
// 初始化队列
void initQueue(LinkQueue *queue) {
queue->front = queue->rear = (QueuePtr) malloc(sizeof(QNode)); // 创建头节点
if (!queue->front) {
exit(-1); // 内存分配失败,退出程序
}
queue->front->next = NULL; // 头节点的下一个节点为空
}
// 判断队列是否为空
int queueEmpty(LinkQueue *queue) {
if (queue->front == queue->rear) {
return 1; // 队列为空
} else {
return 0; // 队列不为空
}
}
// 入队操作
void enQueue(LinkQueue *queue, int x) {
QueuePtr p = (QueuePtr) malloc(sizeof(QNode)); // 创建一个新节点
if (!p) {
exit(-1); // 内存分配失败,退出程序
}
p->data = x; // 新节点存储元素值
p->next = NULL; // 新节点的下一个节点为空
queue->rear->next = p; // 将新节点插入队尾
queue->rear = p; // 修改队尾指针
}
// 出队操作
int deQueue(LinkQueue *queue) {
if (queueEmpty(queue)) {
exit(-1); // 队列为空,无法出队,退出程序
}
QueuePtr p = queue->front->next; // 获取队头节点
int x = p->data; // 获取队头节点的元素值
queue->front->next = p->next; // 将队头节点从队列中删除
if (queue->rear == p) { // 如果队头节点是队列中的最后一个节点
queue->rear = queue->front; // 修改队尾指针
}
free(p); // 释放队头节点的内存
return x; // 返回队头元素值
}

@ -3,28 +3,59 @@
//#include "LinearList/LinkList.c" //#include "LinearList/LinkList.c"
//#include "Stack/SeqStack.c" //#include "Stack/SeqStack.c"
//#include "Stack/LinkStack.c" //#include "Stack/LinkStack.c"
#include "Queue/SeqQueue.c" //#include "Queue/SeqQueue.c"
#include "Queue/LinkQueue.c"
int main() { int main() {
//顺序队列 // int a =20;
SeqQueue seqQueue; // int *p =&a;
initQueue(&seqQueue); // printf("%d--",*p);
enQueue(&seqQueue,1);
enQueue(&seqQueue,2); LinkQueue queue; // 定义一个链队列
// deQueue(&seqQueue); initQueue(&queue); // 初始化队列
// 入队操作,向队列中添加元素
enQueue(&queue, 1);
enQueue(&queue, 2);
enQueue(&queue, 3);
// 判断队列是否为空
if (queueEmpty(&queue)) {
printf("Queue is empty\n");
} else {
printf("Queue is not empty\n");
}
int x = deQueue(&seqQueue); // 出队操作,从队列中删除元素
int x = deQueue(&queue);
printf("Delete element: %d\n", x); printf("Delete element: %d\n", x);
int y = deQueue(&seqQueue);
printf("Delete element: %d\n", y);
// 再次判断队列是否为空 // 再次判断队列是否为空
if (queueEmpty(&seqQueue)) { if (queueEmpty(&queue)) {
printf("Queue is empty\n"); printf("Queue is empty\n");
} else { } else {
printf("Queue is not empty\n"); printf("Queue is not empty\n");
} }
//顺序队列
// SeqQueue seqQueue;
// initQueue(&seqQueue);
// enQueue(&seqQueue,1);
// enQueue(&seqQueue,2);
//// deQueue(&seqQueue);
//
// int x = deQueue(&seqQueue);
// printf("Delete element: %d\n", x);
// int y = deQueue(&seqQueue);
// printf("Delete element: %d\n", y);
// // 再次判断队列是否为空
// if (queueEmpty(&seqQueue)) {
// printf("Queue is empty\n");
// } else {
// printf("Queue is not empty\n");
// }
//链栈 //链栈
// LinkStack *stack = NULL; // LinkStack *stack = NULL;
// stack = push(stack, 'a'); // stack = push(stack, 'a');

Loading…
Cancel
Save