数据结构队列的单链表实现

devtools/2024/9/24 7:05:42/

1.Queuec.h头文件函数名

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>
typedef int QDataType;
typedef struct QueueNode
{QDataType data;struct QueueNode* next;
}QNode;
typedef struct Queue
{QNode* head;QNode* tail;
}Queue;
//初始化
void InitQueue(Queue* pq);
//销毁
void DestoryQueue(Queue* pq);
//入队
void PushQueue(Queue* pq,QDataType x);
//出队
void PopQueue(Queue* pq);
//判空
bool QueueEmpty(Queue* pq);
//个数存在
int QueueSize(Queue* pq);
//队头数据
QDataType Queuefront(Queue* pq);
//队尾数据
QDataType Queuebank(Queue* pq);

2.Queuec.c源文件函数代码实现
 

#include"Queuec.h"
//初始化
void InitQueue(Queue* pq)
{assert(pq);pq->head = pq->tail = NULL;
}
//销毁
void DestoryQueue(Queue* pq)
{QNode* ret = pq->head;while (ret){QNode* count = ret->next;free(ret);ret = count;}pq->head = pq->tail = NULL;
}
//入队
void PushQueue(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("error");exit(1);}newnode->data = x;newnode->next = NULL;if (pq->tail == NULL){pq->head = pq->tail = newnode;}else {pq->tail->next = newnode;pq->tail = newnode;}
}
//出队
void PopQueue(Queue* pq)
{assert(pq);assert(pq->tail && pq->head);if (pq->head->next == NULL){free(pq->head);pq->head = pq->tail = NULL;}else{QNode* next = pq->head->next;free(pq->head);pq->head = next;}
}
//判空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->head == NULL && pq->tail == NULL;
}
//个数存在
int QueueSize(Queue* pq)
{assert(pq);int count = 0;QNode* ret = pq->head;while (ret){count++;ret = ret->next;}return count;
}
//队头数据
QDataType Queuefront(Queue* pq)
{assert(pq);assert(pq->head);return pq->head->data;
}
//队尾数据
QDataType Queuebank(Queue* pq)
{assert(pq);assert(pq->tail);return pq->tail->data;
}

3.testc.c测试代码实现
 

#include"Queuec.h"
int main()
{Queue q;InitQueue(&q);PushQueue(&q, 1);PushQueue(&q, 2);PushQueue(&q, 3);PushQueue(&q, 4);//总个数printf("总个数\n");printf("%d\n", QueueSize(&q));printf("对头元素\n");printf("%d\n", Queuefront(&q));printf("对尾元素\n");printf("%d\n", Queuebank(&q));printf("全部出队\n");while (!QueueEmpty(&q)){printf("%d", Queuefront(&q));PopQueue(&q);}DestoryQueue(&q);
}


http://www.ppmy.cn/devtools/96085.html

相关文章

MySQL中处理JSON数据:大数据分析的新方向,详解与示例

文章目录 1. MySQL中的JSON数据类型2. JSON函数和运算符3. 创建JSON列的表4. 插入JSON数据5. 查询JSON数据6. 复杂查询和聚合7. JSON 数据的索引8. 总结 在当今的大数据时代&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作为一种轻量级的数据交换格式&a…

【测试用例设计方法】错误猜测法

1.错误推测法的概念 错误推测法就是基于经验和直觉推测程序中所有可能存在的各种错误&#xff0c;有针对性地设计测试用例的方法。 2.错误推断法的基本思想 列举出程序中所有可能有的错误和容易发生错误的特殊情况&#xff0c;根据它们选择测试用例。 3. 错误推测法的应用案例 …

Linux命令更新-网络管理

引言 Linux系统作为一个灵活且强大的操作系统&#xff0c;其网络管理功能也是非常丰富的。本文将深入探讨Linux中常用的网络管理命令&#xff0c;包括ifconfig、ip、route等&#xff0c;并结合实例演示其用法和功能&#xff0c;旨在帮助读者更全面地掌握Linux网络配置与管理。…

面向自动驾驶保证车辆转向稳定性的模型预测控制

摘 要 车辆智能化是当前和未来汽车发展的主要方向和核心技术之一。随着车辆智能化水 平的提高&#xff0c;自动驾驶等级从无自动驾驶向完全自动驾驶提升。在自动驾驶的人机协同控制 和完全自动驾驶阶段&#xff0c;由于人类驾驶员在动态驾驶任务中的参与程度不同&#xff0c;…

SpringCloud基于Eureka的服务治理架构搭建与测试:从服务提供者到消费者的完整流程

Spring Cloud微服务框架中的Eureka是一个用于服务发现和注册的基础组件&#xff0c;它基于RESTful风格&#xff0c;为微服务架构提供了关键的服务注册与发现功能。以下是对Eureka的详细解析和搭建举例。 一. Eureka基础知识 &#xff08;1&#xff09;服务治理 服务治理是微…

Linux 开机自动挂载共享文件设置

选择一个要共享的文件 点击确定 -> 确定 启动虚拟机 执行下面的命令 /YumSource 是我选择的共享文件夹&#xff0c;自行替换自已选择的文件夹 mkdir -p /mnt/hgfs cat >> /etc/fstab << EOF .host:/YumSource /mnt/hgfs fuse.vmhgfs-fuse allow_other defaul…

Prometheus+Grafana保姆笔记(3)——监控MySQL

Prometheus Grafana 的组合在微服务项目中可以完成许多DevOps任务&#xff0c;它们共同提供了强大的监控和可视化功能。我们陆续介绍Prometheus Grafana 的相关用法。 前面我们介绍了&#xff1a; PrometheusGrafana保姆笔记&#xff08;1&#xff09;——PrometheusGrafan…

【JavaEE】锁策略和CAS

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 &#x1f4b0;一.常见的的锁策略 锁策略&#xff08;Locking Strategy&#xff09;是指在多线程环境中&#xff0c;为了控制对共享资源的访问&#xff0c;确保…