typedef int QUDataType;
typedef struct QueueNode{
struct QueueNode* _next;
QUDataType _data;
}QueueNode;
/_front是指向队头的指针,_rear是指向队尾的指针
typedef struct Queue{
QueueNode* _front;
QueueNode* _rear;
}Queue;
void QueueInit(Queue* pq){
assert(pq);
pq->_front = NULL;
pq->_rear = NULL;
}
/由于使用结点实现的,销毁的时候每一个结点都要被释放
void QueueDestory(Queue* pq){
assert(pq);
QueueNode* cur = pq->_front;
while (cur){
QueueNode* tnode = cur->_next;
free(cur);
cur = tnode;
}
pq->_front = NULL;
pq->_rear = NULL;
}
QueueNode* BuyQueueNode(QUDataType x){
QueueNode* newnode = (QueueNode*)malloc(sizeof(QUDataType));
assert(newnode);
newnode->_next = NULL;
newnode->_data = x;
return newnode;
}
void QueuePush(Queue* pq,QUDataType x){
assert(pq);
QueueNode* newnode = BuyQueueNode(x);
assert(newnode);
if (pq->_rear == NULL){
pq->_front = newnode;
pq->_rear = newnode;
}
else{
QueueNode* tail = pq->_rear;
tail->_next = newnode;
pq->_rear = newnode;
}
}
void QueuePop(Queue* pq){
assert(pq);
if(pq->_rear == NULL)
return;
QueueNode* tnode = pq->_front;
pq->_front = tnode->_next;
free(tnode);
tnode = NULL;
}
QUDataType QueueFront(Queue* pq){
assert(pq);
if (pq->_front == NULL){
return NULL;
}
return pq->_front->_data;
}
QueueNode* QueueBack(Queue* pq){
assert(pq);
if (pq->_rear == NULL){
return NULL;
}
return pq->_rear;
}
int QueueEmpty(Queue* pq){
assert(pq);
if (pq->_front == NULL){
return 1;
}
return 0;
}
int QueueSize(Queue* pq){
assert(pq);
QueueNode* cur = pq->_front;
int size = 0;
while (cur){
++size;
cur = cur->_next;
}
return size;
}
void QueuePrint(Queue* pq){
assert(pq);
QueueNode* cur = pq->_front;
printf("队头<-");
while (cur){
printf("%d<-", cur->_data);
cur = cur->_next;
}
printf("队尾\n");
}