#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;
}QNode, *pQNode;
typedef struct Queue
{
pQNode head;
pQNode tail;
}Queue, *pQueue;
void Queue_Init(pQueue queue);
void Queue_Destory(pQueue queue);
void Queue_Push(pQueue queue, QDataType value);
void Queue_Pop(pQueue Queue_Pop);
QDataType Queue_Front(pQueue queue);
QDataType Queue_Back(pQueue queue);
int Queue_Size(pQueue queue);
bool Queue_IsEmpty(pQueue queue);
#include "Queue.h"
void Queue_Init(pQueue queue)
{
assert(queue);
queue->head = queue->tail = NULL;
}
void Queue_Destory(pQueue queue)
{
assert(queue);
pQNode cur = queue->head;
while (cur)
{
pQNode next = cur->next;
free(cur);
cur = next;
}
queue->head = queue->tail = NULL;
}
void Queue_Push(pQueue queue, QDataType value)
{
assert(queue);
pQNode newnode = (pQNode)malloc(sizeof(QNode));
if(newnode == NULL)
{
printf("malloc failed!");
exit(-1);
}
newnode->data = value;
newnode->next = NULL;
if(queue->tail == NULL)
{
queue->head = newnode;
queue->tail = newnode;
}
else
{
queue->tail->next = newnode;
queue->tail = newnode;
}
}
void Queue_Pop(pQueue queue)
{
assert(queue);
assert(queue->head);
if(queue->head->next == NULL)
{
free(queue->head);
queue->head = NULL;
queue->tail = NULL;
}
else
{
pQNode next = queue->head->next;
free(queue->head);
queue->head = next;
}
}
QDataType Queue_Front(pQueue queue)
{
assert(queue);
assert(queue->head);
return queue->head->data;
}
QDataType Queue_Back(pQueue queue)
{
assert(queue);
assert(queue->head);
return queue->tail->data;
}
int Queue_Size(pQueue queue)
{
int size = 0;
pQNode cur = queue->head;
while (cur)
{
cur = cur->next;
size++;
}
return size;
}
bool Queue_IsEmpty(pQueue queue)
{
assert(queue);
return queue->head == NULL;
}
int main()
{
Queue q;
Queue_Init(&q);
Queue_Push(&q, 1);
Queue_Push(&q, 2);
Queue_Push(&q, 3);
Queue_Push(&q, 4);
Queue_Push(&q, 5);
while (!Queue_IsEmpty(&q))
{
printf("%d ", Queue_Front(&q));
Queue_Pop(&q);
}
printf("\n");
printf("Queue size is: %d", Queue_Size(&q));
printf("\n");
Queue_Destory(&q);
return 0;
}