#include<stdio.h>
#include<assert.h>
#include<stdbool.h>
typedef struct QueueNode
{
struct QueueNode* next;
int data;
}QueueNode;
typedef struct Queue
{
QueueNode* head;
QueueNode* tail;
}Queue;
bool QueueEmpty(Queue* p)
{
return p->head == NULL;
}
void QueueInit(Queue* p)//队列初始化
{
assert(p);
p->head = p->tail = NULL;
}
void QueueDestroy(Queue* p)
{
assert(p);
QueueNode* cur = p->head;
while (cur != NULL)
{
QueueNode* next = cur->next;
free(cur);
cur = next;
}
p->head = p->tail = NULL;
}
void QueuePush(Queue* p, int x)//插入数据
{
assert(p);
QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));
newnode->data = x;
newnode->next = NULL;
if (p->head == p->tail)
{
newnode= p->head = p->tail;
}
p->tail->next = newnode;
p->tail = newnode;
}
void QueuePop(Queue* p)
{
assert(!QueueEmpty);
Queue* cur = p->head->next;
free(p->head);
p->head = cur;
}
int QueueFront(Queue* p)
{
assert(!QueueEmpty);
return p->head->data;
}
int QueueBack(Queue* p)
{
assert(!QueueEmpty);
return p->tail->data;
}
int QueueSize(Queue* p)
{
assert(!QueueEmpty);
int count = 0;
while (p->head)
{
count++;
p->head = p->head ->next ;
}
return count;
}
int main()
{
Queue p;
QueueInit(&p);
QueuePush(&p, 1);
QueuePush(&p, 2);
QueuePush(&p, 3);
while (!QueueEmpty)
{
printf("%d", QueueFront(&p));
QueuePop(&p);
}
return 0;
}