队列~单链表实现动态

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版权协议,转载请附上原文出处链接和本声明。