给出队列的定义:
typedef int DataType;
/链式结构/
typedef struct Node //链式结构
{
struct Node* _pNext;
DataType _data;
}Node, *PNode;
typedef struct _Queue
{
PNode _pHead;
PNode _pTail;
}_Queue;
将函数的声明放在head.h的头文件里面:
#define _CRT_SECURE_NO_WARNINGS 0
#include <assert.h>
#include <stdio.h>
#include <malloc.h>
#define MAX_SIZE 8
typedef int DataType;
/链式结构/
typedef struct Node //链式结构
{
struct Node* _pNext;
DataType _data;
}Node, *PNode;
typedef struct _Queue
{
PNode _pHead;
PNode _pTail;
}_Queue;
//
/// Queue.h ///
void Queue_Init(_Queue* q);
void Queue_Push(_Queue* q, DataType data);
void Queue_Pop(_Queue* q);
int Queue_Size(_Queue* q);
DataType Queue_Front(_Queue* q);
DataType Queue_Back(_Queue* q);
void Queue_Destroy(_Queue* q);
int Queue_Empty(_Queue* q);
PNode BuyNode(DataType data);
函数的定义(具体实现):
#include "_Queue.h"
void Queue_Init(_Queue* q)
{
assert(q);
q->_pHead = NULL;
q->_pTail = NULL;
}
void Queue_Push(_Queue* q, DataType data)
{
assert(q);
if (NULL == q->_pHead)
{
q->_pHead = q->_pTail = BuyNode(data);
}
else
{
q->_pTail->_pNext = BuyNode(data);
q->_pTail = q->_pTail->_pNext;
}
}
void Queue_Pop(_Queue* q)
{
assert(q);
if (NULL == q->_pHead) //链表为空
{
return;
}
else if (q->_pHead == q->_pTail) //只有一个结点
{
free(q->_pHead);
q->_pHead = q->_pTail = NULL;
}
else
{
PNode pDel = q->_pHead;
q->_pHead = pDel->_pNext;
free(pDel);
}
}
int Queue_Size(_Queue* q)
{
assert(q);
int count = 0;
PNode pCur;
pCur = q->_pHead;
while (pCur)
{
count++;
pCur = pCur->_pNext;
}
return count;
}
DataType Queue_Front(_Queue* q)
{
assert(q && q->_pHead); //保证队列存在且有结点
return q->_pHead->_data;
}
DataType Queue_Back(_Queue* q)
{
assert(q && q->_pHead); //保证队列存在且有结点
return q->_pTail->_data;
}
void Queue_Destroy(_Queue* q)
{
PNode pCur = q->_pHead;
while (pCur)
{
q->_pHead = pCur->_pNext;
free(pCur);
pCur = q->_pHead;
}
q->_pTail = NULL;
}
int Queue_Empty(_Queue* q)
{
assert(q);
return NULL == q->_pHead;
}
PNode BuyNode(DataType data)
{
PNode pNewNode = (PNode)malloc(sizeof(Node));
if (NULL == pNewNode)
{
return NULL;
}
pNewNode->_pNext = NULL;
pNewNode->_data = data;
return pNewNode;
}
测试代码:
#include "_Queue.h"
void Test_Queue()
{
_Queue q;
Queue_Init(&q);
Queue_Push(&q, 1);
printf("size = %d\n", Queue_Size(&q));
printf("front = %d\n", Queue_Front(&q));
printf("back = %d\n", Queue_Back(&q));
Queue_Push(&q, 2);
Queue_Push(&q, 3);
Queue_Push(&q, 4);
printf("size = %d\n", Queue_Size(&q));
printf("front = %d\n", Queue_Front(&q));
printf("back = %d\n", Queue_Back(&q));
Queue_Pop(&q);
Queue_Pop(&q);
printf("size = %d\n", Queue_Size(&q));
printf("front = %d\n", Queue_Front(&q));
printf("back = %d\n", Queue_Back(&q));
Queue_Destroy(&q);
}
int main()
{
Test_Queue();
system("pause");
return 0;
}