目录
一、队列的结构定义
二、队列的初始化
三、队列的打印
四、入队
五、出队
六、取队头元素
七、取队尾元素
八、判断队列是否为空
九、求队列大小
十、销毁队列
十一、测试代码
一、队列的结构定义
//队列的结构定义
typedef int QDataType;typedef struct QueueNode {QDataType val;struct QueueNode* next;
}QNode;//将头指针和尾指针存放到一个结构体中组成队列,易于找到队列头和尾且无需使用二级指针
typedef struct QueueNode {QNode* phead;QNode* ptail;int size;
}Queue;
二、队列的初始化
//队列的初始化
void QueueInit(Queue* pq)
{assert(pq);pq->phead = pq->ptail = NULL;pq->size = 0;
}
三、队列的打印
//队列的打印
void QueuePrint(Queue* pq)
{assert(pq);if (pq->phead == NULL)printf("NULL\n");else{QNode *cur = pq->phead;while (cur){printf("%d ", cur->val);}printf("\n");}
}
四、入队
//入队列
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("malloc fail");exit(-1);}newnode->val = x;newnode->next = NULL;if (pq->phead == NULL){pq->phead = pq->ptail = newnode;}else{pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;
}
五、出队
//出队列
void QueuePop(Queue* pq)
{assert(pq);assert(pq->ptail);if (pq->phead == pq->ptail)//队列中只有一个元素{pq->ptail = NULL;}QNode* tmp = pq->phead;pq->phead = pq->phead->next;free(tmp);tmp = NULL;pq->size--;
}
六、取队头元素
//取队头元素
QDataType QueueFront(Queue* pq)
{assert(pq);assert(pq->phead);//空队列return pq->phead->val;
}
七、取队尾元素
//取队尾元素
QDataType QueueBack(Queue* pq)
{assert(pq);assert(pq->ptail);//空队列return pq->ptail->val;
}
八、判断队列是否为空
//判断队列是否为空
bool QueueEmpty(Queue* pq)
{return pq->phead == NULL;
}
九、求队列大小
//求队列大小
int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}
十、销毁队列
//销毁队列
void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur = pq->phead;while (cur){QNode* tmp = cur;cur = cur->next;free(tmp);tmp = NULL;}pq->phead = NULL;pq->ptail = NULL;pq->size = 0;
}
十一、测试代码
void test01()
{//定义一个队列Queue q;//初始化队列QueueInit(&q);//入队QueuePush(&q, 1);QueuePush(&q, 2);QueuePush(&q, 3);QueuePush(&q, 4);QueuePush(&q, 5);//队列打印QueuePrint(&q);//出队列QueuePop(&q);QueuePop(&q);QueuePop(&q);//队列打印QueuePrint(&q);//取队头元素printf("%d\n", QueueFront(&q));//取队尾元素printf("%d\n", QueueBack(&q));//判断队列是否为空if (QueueEmpty(&q))printf("空\n");elseprintf("非空\n");//求队列大小printf("%d\n", QueueSize(&q));//销毁队列QueueDestroy(&q);
}int main()
{test01();
}