C语言 队列的实现(链表实现)
生活随笔
收集整理的這篇文章主要介紹了
C语言 队列的实现(链表实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//Queue.h#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>typedef int QueueDataType;
//注意這里的兩個結構體
typedef struct QueueNode
{QueueDataType x;struct QueueNode* next;
}QNode;
//先進先出的特點,所以設置頭尾指針較好
typedef struct Queue
{QNode* head;QNode* tail;int size;
}Queue;void QueueInit(Queue* ps);
void QueueDestroy(Queue* ps);
void QueuePush(Queue* ps, QueueDataType x);
void QueuePop(Queue* ps);bool QueueEmpty(Queue* ps);
QueueDataType QueueHead(Queue* ps);
QueueDataType QueueTail(Queue* ps);
int QueueSize(Queue* ps);
//Stack.c
#include"Queue.h"void QueueInit(Queue* ps)
{assert(ps);ps->head = ps->tail = NULL;ps->size = 0;
}void QueueDestroy(Queue* ps)
{assert(ps);QNode* cur = ps->head;while (cur){QNode* tmp = cur;free(cur);cur = tmp->next;}//注意,當刪到最后時,head在tail的后面一個位置//tail所指向的空間已經被釋放,此時tail為野指針//所以要記得把tail和head都置為NULLps->head = ps->tail = NULL;
}void QueuePush(Queue* ps, QueueDataType x)
{assert(ps);QNode* newNode = (QNode*)malloc(sizeof(QNode));if (newNode == NULL){perror("malloc fail");exit(-1);}newNode->x = x;newNode->next = NULL;//如果隊列為空if (ps->head ==NULL && ps->tail==NULL){ps->head = ps->tail = newNode;}else{ps->tail->next = newNode;ps->tail = newNode;}++ps->size;
}void QueuePop(Queue* ps)
{assert(ps);assert(!QueueEmpty(ps));//注意,當刪到最后時,head在tail的后面一個位置//tail所指向的空間已經被釋放,此時tail為野指針//所以要記得把tail和head都置為NULL//這里需要分類討論if (ps->head->next == NULL){free(ps->head);ps->head = ps->tail = NULL;}else{QNode* cur = ps->head;ps->head = ps->head->next;free(cur);cur = NULL;}--ps->size;
}bool QueueEmpty(Queue* ps)
{assert(ps);return ps->size == 0;
}QueueDataType QueueHead(Queue* ps)
{assert(ps);assert(!QueueEmpty(ps));return ps->head->x;
}QueueDataType QueueTail(Queue* ps)
{assert(ps);assert(!QueueEmpty(ps));return ps->tail->x;
}int QueueSize(Queue* ps)
{assert(ps);return ps->size;
}
總結
以上是生活随笔為你收集整理的C语言 队列的实现(链表实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小波包8层分解与重构MATLAB代码,谐
- 下一篇: DWM1000 Blink结构 -- 帧