【数据结构---17】C语言实现一个链表队列

Queue.h

#pragma once

typedef int QDataType;

typedef struct QNode
{
	 struct QNode* _pNext;
	 QDataType _data;
}QNode;

typedef struct Queue
{
	 QNode* _front; // 指向队头元素 
	 QNode* _back; // 指向队尾元素 
}Queue;

void QueueInit(Queue* q);

void QueuePush(Queue* q, QDataType data);

void QueuePop(Queue* q);

QDataType QueueFront(Queue* q);

QDataType QueueBack(Queue* q);

int QueueSize(Queue* q);

int QueueEmpty(Queue* q);

void QueueDestroy(Queue* q);

void QueueTest();

Queue.c

#include "queue.h"
#include <stdio.h>
#include <malloc.h>
#include <assert.h>

QNode* BuyNode(QDataType data)
{
	 QNode* newnode = (QNode*)malloc(sizeof(QNode));
	 if (newnode == NULL)
	 {
		  assert(0);
	 }
	 newnode->_data = data;
	 newnode->_pNext = NULL;
	 return newnode;
}

初始化操作:

void QueueInit(Queue* q)
{
	 assert(q);
	 q->_front = q->_back = NULL;
}

入队:

void QueuePush(Queue* q, QDataType data)
{
	 assert(q);
	 QNode* node = BuyNode(data);
	 if (q->_front == NULL )
	 {
		  q->_front = q->_back = node;
	 }
	 else
	 {
		  q->_back->_pNext = node;
		  q->_back = node;
	 }
}

出队:

void QueuePop(Queue* q)
{
	 assert(q);
	 if (q->_front == NULL)
	 {
		  return;
	 }
	 QNode* newhead = q->_front;
	 //队列中只有一个元素
	 if (q->_front->_pNext == NULL)
	 {
		  q->_front = q->_back = NULL;
	 }
	 else
	 {
		  q->_front = newhead->_pNext;
		  free(newhead);
		  newhead = NULL;
	 }
}

获取队头元素:

QDataType QueueFront(Queue* q)
{
	 if (q->_front == NULL)
	 {
		  return -1;
	 }
	 return q->_front->_data;
}

获取队尾元素:

QDataType QueueBack(Queue* q)
{
	 if (q->_front == NULL)
	 {
		  return -1;
	 }
	 return q->_back->_data;
}

查看当前元素个数:

int QueueSize(Queue* q)
{
	 QNode* pCur = q->_front;
	 int count = 0;
	 while (pCur != NULL)
	 {
		  pCur = pCur->_pNext;
		  count++;
	 }
	 return count;
}

检测队列是否为空:

int QueueEmpty(Queue* q)
{
	 if (q->_front == NULL)
	 {
		  return -1;
	 }
	 return 1;
}

销毁队列:

void QueueDestroy(Queue* q)
{
	 assert(q);
	 if (q->_front == NULL)
	 {
		  return;
	 }
	 QNode* pCur = q->_front;
	 while (pCur != NULL)
	 {
		  q->_front= pCur->_pNext;
		  free(pCur);
		  pCur = NULL;
		  pCur = q->_front;
	 }
	 q->_front = q->_back = NULL;
}

测试队列的实现:

void QueueTest()
{
	 Queue s;
	 QueueInit(&s);
	 QueuePush(&s, 1);
	 QueuePush(&s, 2);
	 QueuePush(&s, 3);
	 QueuePush(&s, 4);
	 
	//出队列
	 QueuePop(&s);
	 QueuePop(&s);
	 QueuePop(&s);
	 
	//查看当前元素个数
	 printf("size=%d\n",QueueSize(&s));
}

主函数:

int main()
{
	 QueueTest();
	 return 0;
}

代码运行测试图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值