队列及笔试题

队列

先进先出

使用单链表进行队尾插入 队头删除

其中带头结点直接尾插,不带头结点第一次操作要判断一下

但是带头结点需要malloc和free

函数传需要修改的参数方法

1、二级指针

2、带哨兵位的头结点

3、返回值

4、如果有多个值,用结构体封装起来

可以把头指针和尾指针放到结构体里面,就不用二级指针了。

他们是结构体成员,想要改变就可以用结构体指针

Queue.h

#pragma once
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>typedef int QDataType;typedef struct QueueNode {QDataType val;struct QueueNode* next;
}QNode;typedef struct Queue {QNode* phead;QNode* ptail;int size;
}Queue;void QInit(Queue* pq);
void QDestroy(Queue* pq);
void QPush(Queue* pq, QDataType x);
void QPop(Queue* pq);//取队头的数据
QDataType QFront(Queue* pq);//取队尾的数据
QDataType QBack(Queue* pq);//判断链表是否为空
bool QEmpty(Queue* pq);//求队长度
int QSize(Queue* pq);

Queue.c

#define  _CRT_SECURE_NO_WARNINGS
#include"Queue.h"void QInit(Queue* pq) {assert(pq);pq->phead = NULL;pq->ptail = NULL;pq->size = 0;
}void QDestroy(Queue* pq) {assert(pq);QNode* cur = pq->phead;while (cur) {pq->phead = pq->phead->next;free(cur);cur = pq->phead;pq->size --;}pq->ptail = NULL;
}void QPush(Queue* pq, QDataType x) {assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL) {perror("malloc");return;}newnode->next = NULL;newnode->val = x;if (pq->phead == NULL) {pq->phead = newnode;pq->ptail = newnode;}else {pq->ptail->next = newnode;pq->ptail = pq->ptail->next;}pq->size++;
}void QPop(Queue* pq) {assert(pq);assert(pq->phead);QNode* del = pq->phead;pq->phead = pq->phead->next;free(del);del = NULL;if (pq->phead == NULL) {pq->ptail = NULL;}pq->size--;
}//取队头的数据
QDataType QFront(Queue* pq) {assert(pq);assert(pq->phead);return pq->phead->val;
}//取队尾的数据
QDataType QBack(Queue* pq) {assert(pq);assert(pq->phead);return pq->ptail->val;
}//判断链表是否为空
bool QEmpty(Queue* pq) {assert(pq);return pq->phead == NULL;
}//求队长度
int QSize(Queue* pq) {assert(pq);return pq->size;
}

Test.c

#define  _CRT_SECURE_NO_WARNINGS
#include"Queue.h"int main() {Queue q;QInit(&q);QPush(&q, 1);QPush(&q, 2);QPush(&q, 3);QPush(&q, 4);QPush(&q, 5);int size = QSize(&q);printf("%d\n", size);while (!QEmpty(&q)) {printf("%d ", QFront(&q));QPop(&q);}printf("\n");size = QSize(&q);printf("%d\n", size);QDestroy(&q);
}

练习:

用队列实现栈

这里有typedef,MyStack就是类型

没有typedef,MyStack就是变量,且这个结构体只能创建这一个变量

思路:

空的队列用来出仅存的那一个数据

满的队列用来存剩下的全部数据

如果直接free(obj),则相当于只free了这个结构体,但是链表里可能还有数据,所以要先分别Destroy一下

用栈实现队列

思路:

1、建立两个栈,一个用来存放数据(pushst),一个用来改变成正确的顺序然后出栈(popst)

      等popst出空了再倒过来数据,效率更高

2、凡是看到这样一个返回值,都需要malloc,否则只是创建了局部变量,出了作用域就被销毁了

3、此处可以手动初始化栈,也可以调用之前写好的完整的一套函数去初始化(推荐)

访问结构体里的变量用 . 

4、内部实现

STInit需要传的是栈的地址,对栈进行操作

5、结构体 和 结构体的指针 是有区别的,结构体的指针只是一个地址。

如果定义结构体时定义成了上面这样

则相当于malloc了pushst和popst这两个指针,但是这两个指针没有具体只的内容和空间,如果没有初始化就是野指针。同时还需要malloc栈的空间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/434589.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析Debian与Ubuntu:技术特点与用户使用指南

深入解析Debian与Ubuntu&#xff1a;技术特点与用户使用指南 引言 Debian和Ubuntu作为两大知名的Linux发行版&#xff0c;不仅在历史和理念上有所不同&#xff0c;在技术特点和用户使用方法上也各具特色。本文将深入解析它们的技术特点&#xff0c;并提供用户使用指南&#x…

GB/T28181规范解读和技术实现

GB/T28181发展历程 GB/T28181-2011&#xff1a; 提出与起草&#xff1a;由公安部科技信息化局提出&#xff0c;全国安全防范报警系统标准化技术委员会&#xff08;SAC/TC100&#xff09;归口&#xff0c;公安部一所等多家单位共同起草。发布与实施&#xff1a;2012 年 6 月 1 …

timedatectl命令:告别时间烦恼,一键同步系统时间

一、命令简介 ​timedatectl​ 命令用于查看和设置系统的时间和日期&#xff0c;以及配置时区和 NTP&#xff08;Network Time Protocol&#xff09;设置。 相关命令&#xff1a;cal ​显示日历、 date ​查看、设置日期 ‍ 二、命令参数 格式&#xff1a; timedatectl […

Linux基础(一):计算机组成

整体构成 五个部分&#xff1a;CPU、输入、输出、内存、硬盘 1.CPU 1.1CPU指令集 CPU内部包含一些微指令&#xff0c;包含两种——精简指令集&#xff08;Reduced Insruction Set Computer, RISC&#xff09;和复杂指令集&#xff08;Complex Instruction Set Computer, CIS…

基于ASRPRO的语音应答

做这个的起因是为了送女朋友&#xff0c;而且这东西本身很简单&#xff0c;所以在闲暇之余尝试了一下。 这个工程很简单&#xff0c;只通过对ASRPRO进行编程即可。 先看效果。&#xff08;没有展示所有效果&#xff0c;后续会列出来所有对话触发&#xff09; 语音助手示例1 语音…

全网最适合入门的面向对象编程教程:54 Python字符串与序列化-字符串格式化与format方法

全网最适合入门的面向对象编程教程&#xff1a;54 Python 字符串与序列化-字符串格式化与 format 方法 摘要&#xff1a; 在 Python 中&#xff0c;字符串格式化是将变量插入到字符串中的一种方式&#xff0c;Python 提供了多种字符串格式化的方法&#xff0c;包括旧式的 % 格…

解决iPhone无法有效响应问题的指南

当您触摸、滑动和点击屏幕时&#xff0c;iPhone 没有响应或屏幕冻结是很烦人的。不可否认&#xff0c;iPhone 是最好的智能手机之一&#xff0c;但它并不完美。触摸屏冻结是 iPhone 用户面临的最常见问题之一。 好消息是&#xff0c;这个问题通常是由软件错误而不是硬件损坏引…

MySQL的增删查改(基础)一

一.增 方式1&#xff08;简写插入&#xff09;&#xff1a; 语法&#xff1a;insert into 表名 values&#xff08;值&#xff0c;值&#xff0c;值……&#xff09;; 这里insert into 代表要插入一条新数据行&#xff0c;values后面就是该行的值&#xff0c;其中后面的值的…

C++20中头文件concepts的使用

<concepts>是C20中新增加的头文件&#xff0c;此头文件是concepts库的一部分&#xff0c;主要用于模板编程、泛型编程。包括 1.core language concepts&#xff1a; std::same_as&#xff1a;指定一种类型(type)与另一种类型是否相同。 std::derived_from&#xff1a;指定…

Apollo Planning2.0决策规划算法代码详细解析 (3):PlanningComponent框架介绍

Apollo Planning 2.0的框架更新涉及多个方面&#xff0c;这些更新旨在提升自动驾驶系统的灵活性、可扩展性和性能。 以下是Apollo Planning 2.0 的框架图&#xff1a; 其中&#xff0c;Apollo的PlanningComponent在自动驾驶系统中扮演着至关重要的角色。其主要作用可以归纳为以…

使用yum为centos系统安装软件以及使用(包含阿里云yum源配置)

centos系统配置阿里云yum源 因为centos7官方停止维护&#xff0c;自带yum源用不了了&#xff0c;所以可以更换成阿里云yum源 方法&#xff1a; 使用root权限执行以下语句 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo CentOS…

番外篇 | 复现AC-YOLOv5,进行自动化织物缺陷检测

前言:Hello大家好,我是小哥谈。我们提出了一种基于AC-YOLOv5的新型纺织缺陷检测方法。将空洞空间金字塔池化(ASPP)模块引入YOLOv5主干网络中,提出了squeeze-and-excitation(CSE)通道注意力模块,并将其引入到YOLOv5主干网络中。🌈 目录 🚀1.基础概念 🚀2.添…

一文上手Kafka【中】

一、发送消息细节 在发送消息的特别注意: 在版本 3.0 中&#xff0c;以前返回 ListenableFuture 的方法已更改为返回 CompletableFuture。为了便于迁移&#xff0c;2.9 版本添加了一个方法 usingCompletableFuture&#xff08;&#xff09;&#xff0c;该方法为 CompletableFu…

【韩顺平Java笔记】第2章:Java概述

按视频的标号来对应小标题&#xff0c;自用学习笔记 文章目录 5. 内容梳理6. 程序举例6.1 什么是程序 7. Java故事7.1 Java诞生小故事7.2 Java技术体系平台 8. Java特性8.1 Java重要特点 9. sublime10. jdk介绍10.1 Java运行机制及运行过程10.1.1 Java虚拟机&#xff08;JVM&a…

【Python】多个dataframe存入excel的不同的sheet表里,而不会被覆盖的方法

我发现&#xff0c;我原来用的多个工作簿存入的方法&#xff0c;发现不太可行&#xff0c;如果我用原来的方法&#xff0c;然后for循环&#xff0c;新的dataframe会把原来的覆盖掉&#xff0c;然后只剩下一个工作薄。原先的代码&#xff1a; with pd.ExcelWriter(file_name ) …

【题解】2022ICPC杭州-K

翻译 原题链接   简述一下就是每次询问重新定义一个字母排序表&#xff0c;问在这个顺序下n个字符串的序列的逆序数是多少。 字典树计算逆序数 先考虑初始状况下&#xff0c;即 a < b < . . . < z a<b<...<z a<b<...<z的情况下&#xff0c;逆序…

[SAP ABAP] 锁对象

在SAP中使用锁对象&#xff0c;用于避免在数据库中插入或更改数据时出现不一致的情况 1.创建锁对象 数据准备 学校表(ZDBT_SCH_437) 使用事务码SE11创建锁对象 点击"锁对象"单选按钮&#xff0c;输入以E开头的锁定对象的名称&#xff0c;然后点击创建按钮 锁对象名…

看480p、720p、1080p、2k、4k、视频一般需要多大带宽呢?

看视频都喜欢看高清&#xff0c;那么一般来说看电影不卡顿需要多大带宽呢&#xff1f; 以4K为例&#xff0c;这里引用一位网友的回答&#xff1a;“视频分辨率4092*2160&#xff0c;每个像素用红蓝绿三个256色(8bit)的数据表示&#xff0c;视频帧数为60fps&#xff0c;那么一秒…

基于VUE的在线茶叶购物网站的设计与实现后端SpringBoot数据库MySQL

目录 1. 项目结构规划 2. 技术选型与工具链 3. 关键功能模块设计 4. 数据库设计 5. 安全性考虑 6. 性能优化建议 在开发一个在线茶叶购物网站之前&#xff0c;了解相关的研究背景和技术发展趋势是非常重要的。以下是一些关键点&#xff0c;可以帮助理解该项目的开发背景和…

召回07 双塔模型——正负样本

正样本&#xff1a; 二八法则&#xff0c;少部分物品占据了大多数点击&#xff0c;会导致正样本大多是热门物品。以一定的概率抛弃一些热门物品&#xff0c;抛弃的概率与样本的点击次数正相关。 负样本&#xff1a; 简单负样本 上述简单负样本是从全体样本中抽样。其中&#…