Queue.h
#ifndef C_HOMEWORK_QUEUE_H
#define C_HOMEWORK_QUEUE_H
#endif //C_HOMEWORK_QUEUE_H
#include "BinaryTree.h"
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
typedef int DataType;
typedef struct QueueNode{
struct QueueNode* _next;
DataType _data;
}QueueNode;
typedef struct Queue{
QueueNode* _front;
QueueNode* _rear;
}Queue;
void QueueInit(Queue* q);
void QueueDestory(Queue* q);
QueueNode* BuyQueueNode(DataType x);
void QueuePush(Queue* q ,DataType x);
void QueuePop(Queue* q);
DataType QueueFront(Queue* q);
DataType QueueBack(Queue* q);
int QueueEmpty(Queue* q);
int QueueSize(Queue* q);
void QueuePrint(Queue* q);
void Test();
Queue.c
#include "Queue.h"
void QueueInit(Queue* q){
assert(q);
q->_front = q->_rear = NULL;
}
void QueueDestory(Queue* q){
assert(q);
while(q->_front){
q->_rear = q->_front->_next;
free(q->_front);
q->_front = q->_rear;
}
}
QueueNode* BuyQueueNode(DataType x){
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->_next = NULL;
newNode->_data = x;
return newNode;
}
void QueuePush(Queue* q ,DataType x){
assert(q);
QueueNode* newNode = BuyQueueNode(x);
if(q->_front == NULL) {//头元素
q->_front = newNode;
q->_rear = newNode;
}else{
q->_rear->_next = newNode;
q->_rear = q->_rear->_next;
}
}
void QueuePop(Queue* q){
assert(q);
if(q->_front){
QueueNode* next = q->_front->_next;
//删除,出队
free(q->_front);
q->_front = next;
//删除的为最后一个元素
if(q->_front == NULL)
q->_rear = NULL;
}
// if(q == NULL)
// return;
// QueueNode* cur = q->_front;
// q->_front = q->_front->_next;
// free(cur);
// cur = NULL;
}
DataType QueueFront(Queue* q){
assert(q);
if(q->_front)
return q->_front->_data;
return -1;
}
DataType QueueBack(Queue* q){
assert(q);
return q->_rear->_data;
}
int QueueEmpty(Queue* q){
assert(q);
if(q->_front != NULL)
return 0;
else
return 1;
}
int QueueSize(Queue* q){
assert(q);
DataType count = 0;
QueueNode* cur = q->_front;
while(cur){
++count;
cur = cur->_next;
}
printf("队列中有%d个元素\n",count);
return count;
}
void QueuePrint(Queue* q){
assert(q);
QueueNode* cur = q->_front;
while(cur){
printf("%d ",cur->_data);
cur = cur->_next;
}
printf("\n");
}
void Test(){
Queue q;
QueueInit(&q);
QueuePush(&q,1);
QueuePush(&q,2);
QueuePush(&q,3);
QueuePush(&q,4);
QueuePop(&q);
QueueSize(&q);
QueuePrint(&q);
QueuePop(&q);
QueuePrint(&q);
// QueuePrint(&q);
}
int main(){
Test();
return 0;
}