Queue.h
#pragma once
#include <malloc.h>
#include <assert.h>
#include <stdio.h>
typedef int QDataType;
// 链式结构:表示队列
typedef struct QListNode
{
struct QListNode* next;
QDataType data;
}QNode;
// 队列的结构
typedef struct Queue
{
QNode* front;
QNode* back;
int size;
}Queue;
//初始化队列
void QueueInit(Queue* ps);
// 队尾入队列
void QueuePush(Queue* ps, QDataType data);
// 队头出队列
void QueuePop(Queue* ps);
// 获取队列头部元素
QDataType QueueFront(Queue* ps);
// 获取队列队尾元素
QDataType QueueBack(Queue* ps);
// 获取队列中有效元素个数
int QueueSize(Queue* ps);
// 检测队列是否为空,如果为空返回非零结果,如果非空返回0
int QueueEmpty(Queue* ps);
// 销毁队列
void QueueDestroy(Queue* ps);
Queue.c
#include"Queue.h"
//创建新结点
QNode* buynode(QDataType data){
QNode* newnode = (QNode*)malloc(sizeof(QNode));
newnode->data = data;
newnode->next = NULL;
return newnode;
}
// 初始化队列
void QueueInit(Queue* ps){
assert(ps);
ps->back = ps->front = NULL;
ps->size = 0;
}
// 队尾入队列
void QueuePush(Queue* ps, QDataType data){
assert(ps);
QNode* newnode = buynode(data);
if (ps->front == NULL){
ps->front = newnode;
}
else{
ps->back->next = newnode;
}
ps->back = newnode;
ps->size++;
}
// 队头出队列
void QueuePop(Queue* ps){
assert(ps);
if (QueueEmpty(ps)){
return;
}
else{
QNode* delNode = ps->front;
ps->front = delNode->next;
free(delNode);
if (NULL == ps->front)
{
ps->back = NULL;
}
}
ps->size--;
}
// 获取队列头部元素
QDataType QueueFront(Queue* ps){
assert(!QueueEmpty(ps));
return ps->front->data;
}
// 获取队列队尾元素
QDataType QueueBack(Queue* ps){
assert(!QueueEmpty(ps));
return ps->back->data;
}
// 获取队列中有效元素个数
int QueueSize(Queue* ps){
assert(!QueueEmpty(ps));
return ps->size;
}
// 检测队列是否为空,如果为空返回非零结果,如果非空返回0
int QueueEmpty(Queue* ps){
assert(ps);
return NULL == ps->front;
}
// 销毁队列
void QueueDestroy(Queue* ps){
assert(ps);
QNode* cur = ps->front;
while (cur){
ps ->front= cur->next;
free(cur);
cur = ps->front;
}
ps->back = NULL;
ps->size = 0;
}
test.c
#include"Queue.h"
void test(){
Queue ps;
QueueInit(&ps);
QueuePush(&ps, 1);
QueuePush(&ps, 2);
QueuePush(&ps, 3);
printf("%d\n", QueueSize(&ps));
printf("%d\n", QueueFront(&ps));
QueuePop(&ps);
QueuePop(&ps);
QueuePop(&ps);
QueuePop(&ps);
QueuePop(&ps);
QueueDestroy(&ps);
}
int main(){
test();
system("pause");
return 0;
}
版权声明:本文为m0_58103115原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。