From cd3336844a4a42f79cf5d653a8b7cdbe7868e3cc Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 27 May 2024 12:35:37 +0800 Subject: [PATCH] queue.cpp --- queue.cpp | 162 ------------------------------------------------------ 1 file changed, 162 deletions(-) delete mode 100644 queue.cpp diff --git a/queue.cpp b/queue.cpp deleted file mode 100644 index d3bc8a4..0000000 --- a/queue.cpp +++ /dev/null @@ -1,162 +0,0 @@ -#include"stdio.h" -#include"stdlib.h" -typedef int QueueElem; - -// 队列结点类型 -typedef struct linkQueueNode -{ - QueueElem data; - struct linkQueueNode *next; -}LinkQueueNode; - -// 队列 -typedef struct linkQueue -{ - LinkQueueNode *front; // 队头指针 - LinkQueueNode *rear; // 队尾指针 - int QueueLen; // 队列长度 -}LinkQueue; - -// 1. 初始化一个队列 -LinkQueue *initQueue() -{ - LinkQueue *queue = (LinkQueue* )malloc(sizeof(LinkQueue)); - queue->front = queue->rear = NULL; - queue->QueueLen = 0; - - return queue; -} - -// 2. 入队 -int enterQueue(LinkQueue *Queue, QueueElem data) -{ - // 申请一个队列元素空间z - LinkQueueNode *QNode = (LinkQueueNode* )malloc(sizeof(LinkQueueNode)); - if ( QNode == NULL ) - return -1; //入队失败 - QNode->data = data; - QNode->next = NULL; - - // 入队 -- 尾插 - // 队列为空 - if ( Queue->rear == NULL ) - Queue->front = Queue->rear = QNode; - else - { - Queue->rear->next = QNode; - Queue->rear = QNode; - } - - Queue->QueueLen++; - - return 0; -} - -// 5. 判断队列是否为空 -int QueueIsEmpty(LinkQueue *Queue) -{ - return Queue->QueueLen; -} -//#define QueueLen(Queue) QueueIsEmpty(Queue) - -// 3. 出队 -QueueElem delQueue(LinkQueue *Queue) -{ - // 如果队列不为空 - if ( QueueIsEmpty(Queue) ) - { - // 摘除头部结点 - LinkQueueNode *p = Queue->front; - Queue->front = Queue->front->next; - p->next = NULL; - - // 如果只有一个结点 - Queue->rear = Queue->front ? Queue->rear : NULL; - - // 保留结点的数据域 释放掉结点 - QueueElem data = p->data; - // Queue->front->next->data = p->front->data; - free(p); - - Queue->QueueLen--; - //free(p); - return data; - } - - return -1; // 出队失败 -} - -// 4. 获取队头元素 -QueueElem getFront(LinkQueue *Queue) -{ - - // 如果队列不为空 - if ( QueueIsEmpty(Queue) ) - return Queue->front->data; - - return -1; -} - -//#define QueueLen(Queue) QueueIsEmpty(Queue) -// 6. 获取队列长度 -int QueueLen(LinkQueue *Queue) -{ - return Queue->QueueLen; -} - -// 7. 清空一个队列 --- 不断地出队 -void clearQueue(LinkQueue *Queue) -{ - while ( QueueIsEmpty(Queue) ) - delQueue(Queue); -} - -// 8. 销毁一个队列 -void destoryQueue(LinkQueue **Queue) -{ - clearQueue(*Queue); - free(*Queue); - *Queue = NULL; -} - -int main() -{ - QueueElem x; - - LinkQueue *Queue = initQueue(); - - // 不断入队 - while(1) - { - scanf("%d", &x); - if ( x == 0 ) - { - printf("input finsh\n"); - break; - } - - // 如果入队列失败 直接退出程序 - if ( enterQueue(Queue, x) == -1 ) - exit(-1); - } - - // 输出队列元素 - printf ("Front Elem: %d QueueLen: %d\n", getFront(Queue), QueueLen(Queue)); - - // 如果队列不为空 就不断出队 - while ( QueueIsEmpty(Queue) ) - printf("%d ", delQueue(Queue)); - printf("\n"); - - enterQueue(Queue, 1); - enterQueue(Queue, 2); - - printf ("Front Elem: %d\n", getFront(Queue)); - - // 销毁队列 并且将实参指向NULL - destoryQueue(&Queue); - if ( Queue == NULL ) - printf("Destory Finsh\n"); - - return 0; -}