队列的实现:
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
typedef int QDataType;
typedef struct QueueNode
{
struct QueueNode* next;
QDataType data;
}QueueNode;
struct Queue
{
QueueNode* head;
QueueNode* tail;
//size_t_size;
}Queue;
void TestQueue1()
{
Queue q;
QueueInit(&q);
QueuePush(&q,1);
QueuePush(&q,2);
QueuePush(&q,3);
QueuePush(&q,4);
QueuePop(&q);
QueuePop(&q);
QueuePop(&q);
QueuePop(&q);
printf("%d\n",QueueFront(&q));
printf("%d\n",QueueBack(&q));
QueuePush(&q,10);
QueuePush(&q,20);
QueueDestroy(&q);
while (!queueEmpty(&q))
{
QDataType front=QueueFront(&q);
printf("%d",front);
QueuePop(&q);
}
printf("\n");
}
void QueueInit(Queue* pq)
{
assert(pq);
pq->head=NULL;
pq->tail=NULL;
}
void QueueDestroy(Queue* pq)
{
assert(pq);
QueueNode* cur=pq->head;
while(cur != NULL)
{
QueueNode* next=cur->next;
free(cur);
cur=next;
}
pq->head=pq->tail=NULL;
}
void QueuePush(Queue* pq,QDataType x)
{
assert(pq);
QueueNode* newnode=(QueueNode*)malloc(sizeof(queueNode));
newnode->data=x;
newnode->next=NULL;
if(pq->head==NULL)
{
pq->head=pq->tail=newnode;
}
else
{
pq->tail->next=newnode;
pq->tail=newnode;
}
}
void QueuePop(Queue* pq)
{
assert(pq);
//if(pq->head==NULL)
// return;
assert(!QueueEmpty(pq));
QueueNode*next=pq->head->next;
free(pq->head);
pq->head=next;
if(pq->head==NULL)
{
pq->tail=NULL;
}
}
QDataType QueueFront(Queue* pq)
{
assert(pq);
assert(!QueueEmpty(pq));
return pq->head->data;
}
QDataType QueueBack(Queue*pq)
{
assert(pq);
//assert(!QueueEmpty(pq));
return pq->tail->data;
}
int QueueSize(Queue* pq)
{
assert(pq);
int n=0;
QueueNode* cur=pq->head;
while(cur)
{
++n;
cur=cur->next;
}
return n;
}
bool QueueEmpty(Queue* pq)
{
assert(pq);
return pq->head==NULL;
}
int main()
{
TestQueue1();
return 0;
}