C语言实现队列
原理:
- 通过单链表实现的队列,队列就是一个尾插头删的单链表,先实现一个链表 ,再实现一个队列包括队头指针和队尾指针
- 图

头文件
#ifndef Queue_h
#define Queue_h
#include <stdio.h>
typedef int QDataType;
typedef struct ListNode
{
QDataType _data;
struct ListNode* _pNext;
}ListNode,*pListNode;
typedef struct Queue
{
pListNode _pHead;
pListNode _pTail;
}Queue;
void QueueInit(Queue* q);
void QueuePush(Queue* q, QDataType d);
void QueuePop(Queue* q);
int QueueSize(Queue* q);
int QueueEmpty(Queue* q);
QDataType Front(Queue* q);
QDataType Back(Queue* q);
#endif
源文件
#include "Queue.h"
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
pListNode BuyNode(QDataType d)
{
pListNode new = malloc(sizeof(ListNode));
new->_data = d;
new->_pNext = NULL;
return new;
}
void QueueInit(Queue* q)
{
assert(q);
q->_pHead = BuyNode(0);
q->_pTail =q->_pHead;
}
void QueuePush(Queue* q, QDataType d)
{
assert(q);
q->_pTail->_pNext = BuyNode(d);
q->_pTail = q->_pTail->_pNext;
}
void QueuePop(Queue* q)
{
pListNode dNode = q->_pHead->_pNext;
if (dNode)
{
q->_pHead->_pNext = dNode->_pNext;
if (q->_pHead->_pNext == NULL) {
q->_pTail = q->_pHead;
}
free(dNode);
}
}
int QueueSize(Queue* q)
{
assert(q);
pListNode pre = q->_pHead->_pNext;
int count = 0;
while (pre)
{
count++;
pre = pre->_pNext;
}
return count;
}
int QueueEmpty(Queue* q)
{
return NULL == q->_pHead->_pNext;
}
QDataType Front(Queue* q)
{
return q->_pHead->_pNext->_data;
}
QDataType Back(Queue* q)
{
return q->_pTail->_data;
}