2024-2025-1 20241416 《计算机基础与程序设计》第十三周学习总结

news/2024/12/22 19:01:56/文章来源:https://www.cnblogs.com/rockytyh/p/18622400

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计
这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十三周作业
这个作业的目标 复习巩固前面所学的内容
作业正文 https://www.cnblogs.com/rockytyh/p/18622400

教材学习内容总结
一、结构体
结构体的定义
结构体允许将不同类型的数据元素组合在一起形成一种新的数据类型。其声明形式为:struct结构体名{类型名1成员名1; 类型名2成员名2;...类型名n成员名n;};。例如,要表示学生的个人基本信息如姓名、性别、年龄、分数等,可以如下定义:struct Student{char name[10];...};。结构体类型声明一般放在程序文件开头,此时这个声明是全局的,在全局作用域内,该声明处处可见。
二、结构体数组
结构体数组的定义
定义结构体数组的方法同定义结构体变量类似,只是将变量改成数组。例如struct STUDENT stu[10];就定义了一个结构体数组,共有10个元素,每个元素都是一个结构体变量,都包含所有的结构体成员。
结构体数组的初始化
结构体数组的初始化与数值型数组的初始化类似。当对数组中全部元素赋值时,也可不给出数组长度。例如:struct STU stu[5] = {{"小红", 22, 'F', "Z1207031"},{"小明", 21, 'M', "Z1207035"},{"小七", 23, 'F', "Z1207022"},{"小欣", 20, 'F', "Z1207015"},{"小天", 19, 'M', "Z1207024"}}; 。
三、结构体指针
结构体指针的定义
结构体指针是指向结构体类型数据的指针。例如,如果有结构体struct Test1,那么struct Test1 *ptr;就定义了一个指向struct Test1类型的指针ptr。
更高效。
四、逻辑结构分类
线性结构:数据元素之间存在一对一的线性关系,像线性表(顺序表、链表等)、栈、队列都属于线性结构。例如,顺序表中元素在逻辑上是依次排列的,像数组就是一种顺序存储的线性表实现形式;链表则是通过节点之间的指针链接来体现线性关系,每个节点包含数据域和指向下一节点的指针域。
非线性结构:数据元素之间不是简单的一对一关系,比如树结构(二叉树、多叉树等)中节点存在一对多的层次关系,图结构中节点之间可能存在多对多的复杂关系,常用于表示网络、地图等复杂的数据关联场景。
五、存储结构分类
顺序存储:把数据元素按照逻辑顺序依次存放在连续的存储单元中,优点是可以随机访问元素,查找速度快,缺点是插入、删除操作可能需要移动大量元素,比如数组就是典型的顺序存储结构。
链式存储:通过节点来存储数据元素,节点之间通过指针链接表示逻辑关系,在插入、删除操作时相对灵活,不需要大量移动元素,但不能像顺序存储那样随机、快速地访问元素,链表是常见的链式存储结构体现。
索引存储:除了存储数据元素本身外,还建立了索引表,通过索引表可以快速定位到数据元素,常用于数据库等对查找效率要求较高的场景。
散列存储(哈希存储):根据数据元素的关键字通过特定的哈希函数计算出存储地址,能快速查找元素,但可能存在哈希冲突等问题,需要合适的冲突解决办法,像链地址法、开放定址法等。
六、常见数据结构及基本操作
线性表:基本操作包括初始化、插入、删除、查找、遍历等,顺序表实现时插入删除操作要考虑元素移动,链表实现时要处理好指针的修改。
栈:遵循后进先出(LIFO)原则,操作主要有入栈(压栈)、出栈(弹栈)、查看栈顶元素等,常用于函数调用栈、表达式求值等场景。
队列:遵循先进先出(FIFO)原则,有入队、出队、查看队首元素等操作,常用于任务排队、消息缓冲等情况。
树:例如二叉树有遍历(前序、中序、后序、层序遍历等)、插入节点、删除节点、查找节点等操作,不同遍历方式按照特定顺序访问树中的节点,可用于构建搜索树来实现高效查找等功能。
图:基本操作包含顶点和边的添加、删除,图的遍历(深度优先遍历、广度优先遍历等),在解决路径规划、网络拓扑等复杂问题中有着广泛应用。
数据结构的合理运用能提升程序解决复杂问题的能力,在软件开发、算法设计等众多领域都有着至关重要的作用,而结构体作为一种自定义复合数据类型,常被用于构建各种数据结构的节点等,是数据结构实现的基础组成部分之一。

教材学习中的问题和解决过程
问题1:怎么判断字符串是否一样?
答案1:函数介绍
在C语言中,可以使用<string.h>头文件中的strcmp函数来判断两个字符串是否相等。strcmp函数的原型为int strcmp(const char *s1, const char *s2);。
这个函数会按照字典序比较s1和s2指向的两个字符串。
如果s1和s2相等,函数返回0。
如果s1大于s2(按照字典序),函数返回一个大于0的值。
如果s1小于s2(按照字典序),函数返回一个小于0的值。

问题2:使用结构体时,有哪些注意事项?
答案2:一、内存对齐相关
填充字节的影响
为了提高访问效率,大多处理器要求多字节对象(如结构中大于char的类型)不能处于随意内存地址,必须是2或4或对象大小的倍数,这可能导致结构体成员间存在填充字节。例如,若结构体中有char类型后紧跟int类型,可能会有填充字节存在。由于填充字节的存在,使用sizeof测量结构体大小时,返回值往往大于结构的期望值。
内存空洞的处理
相同的数据类型放在一起可以减少内存空洞,使内存资源利用更有效。例如在定义结构体成员时,将相同类型的成员依次排列。
二、结构体成员访问
不同访问方式
通过结构体变量访问成员使用.运算符,若通过指向结构体的指针访问成员则使用->运算符。并且在通过指针访问成员时,要检查指针是否为NULL,以避免出现段错误。
结构体比较
不能直接使用==或!=运算符来比较两个结构体变量,因为这些运算符比较的是地址而不是结构体的内容。必须逐个比较结构体的成员来判断它们是否相等,即使是同一类型的结构体间也不能直接使用关系符比较。
三、结构体的定义与初始化
结构体大小
结构体的大小取决于成员变量的大小和对齐方式,可以使用sizeof运算符获取结构体大小,这对动态内存分配和传递结构体参数很有用。
结构体初始化
在定义结构体变量时,可以在声明时初始化结构体的成员变量。若没有初始化,则结构体的成员变量将包含垃圾值。
四、结构体嵌套与传递
结构体嵌套
结构体可以包含其他结构体作为其成员,这种嵌套结构体的访问方式与普通结构体成员的访问方式相同。
结构体传递
在函数参数中传递结构体时,可以通过值传递或引用传递(指针)来传递结构体。引用传递可以减少复制的开销,特别是对于大型结构体。
五、结构体类型转换(特定语言相关,如Go语言)
相同字段转换
在Go语言中,结构体是用户单独定义的类型,和其他类型转换时需要有完全相同的字段(名字、个数和类型)。例如,两个结构体拥有相同类型、相同数目的元素,但变量名不同时进行赋值会报错,只有当结构体中的变量名等字段完全一致时才可以进行类型转换。
类型重新定义转换
在Go语言中,结构体进行type重新定义(相当于取别名),被认为是新的数据类型,但是相互间可以强转。

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

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

相关文章

Transformers 框架 Pipeline 任务详解(五):表格问答(table-question-answering)

本文全面介绍了 Transformers 框架中的 table-question-answering 任务,从基础概念到实际应用,再到如何构建和部署一个交互式的表格问答系统。无论是在商业智能、教育辅导还是金融分析等领域,Transformers 框架都能为我们提供强有力的支持,助力我们快速实现高效的表格问答解…

WPF实现加载的动态效果

思路: 1.创建一个画布,长宽100*100;<Canvas Width="100" Height="100">2.画布上创建一个圆,直径25,位于正上方中间,底色浅灰;<Style TargetType="Ellipse"><Setter Property="Width" Value="25"/>…

Derby 数据库介绍(2)--使用

本文主要介绍 Derby 的基本使用(简介可参考:Derby 数据库介绍(1)--简介),文中所使用到的软件版本:Java 1.8.0_341、Derby 10.14.2.0。 1、嵌入模式 直接使用 JDBC 连接数据库,可创建和启动数据库。 1.1、内存数据库@Test public void embeddedMemory() throws SQLException …

视野修炼第114期 | 2024JS现状调查结果

① 2024 JavaScript 现状调查结果 ② Text Fragment - 直接链接网页文本 ③ my-github-2024 - 2024 GitHub 报告生成 ④ 优秀的单页网站案例 ⑤ Gradienty - 一套CSS工具集 ⑥ 并发和并行的区别 ⑦ AI 音效生成欢迎来到第 114 期的【视野修炼 - 技术周刊】,下面是本期的精选内…

线程池工作原理

线程池综述 它的主要特点为:线程复用;控制最大并发数;管理线程。 使用线程池的好处有 第一:降低资源消耗。通过重复利用已创建的线程,降低线程创建和销毁带来的资源消耗 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建好就可以立即执行。 第三:提高线程的…

探讨:为什么大公司一定要使用微服务?

探讨:为什么大公司一定要使用微服务? | Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission | | -------------| -------------| -------------…

实验6 模板类、文件I\O和异常处理

实验任务4#pragma once #include <iostream> #include <stdexcept>using namespace std;template <typename T> class Vector { public:Vector(int n, int value=0);Vector(Vector<T> &v);~Vector();int get_size() const;T& at(int i);T&…

千峰教育--Netty 再学习 1 网络模型概述(BIO、NIO、AIO)、BIO 逻辑实现及其局限性(单线程服务端、多线程服务端、线程池服务端)

课程介绍 1 网络模型概述 2 Channel 详解 3 Buffer 详解 4 Selector 详解 5 NIO综合案例-聊天室 6 AIO概念及实现 1 网络编程IO 模型介绍 1.1 BLockingIO Blocking IO也称BIO,及同步阻塞IO。Java 的 io 包基于流模型实现,提供了FIle,FileInputStream,FileOutputStream等输…

ZBlog升级之后出现后台登录错误

升级 1.7.3.3260 之后出现后台登录错误( 提示非法访问,验证码不显示,验证码报错 ) 这是因为 1.7.3.3260 增加了对后台登录的 2 个保护功能,因为主题插件的兼容性原因或其它原因造成功能不正常,可以在 option.php 里关掉 CSRF 保护功能或是验证码功能,或是 2 个都关闭 使…

织梦源码后台更新系统后,网页错乱的解决方法

覆盖模板文件下载之前使用的模板文件。 覆盖 templets/default 目录下的文件。 如果使用的是其他模板目录,确保更新不会影响到这些目录。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站…

解决Dede织梦上传图片失败 ERROR:Copy Uploadfile Error! 提示

错误显示:拷贝(复制)上传文件出错! 原因:上传的文件损坏。 上传目录无写权限。解决方法:尝试上传其它图片。 给uploads写入权限:Linux服务器:通过FTP设置 uploads 目录为777权限,子文件夹选择继承。 Windows 2003服务器:右键文件夹属性 -> 安全 -> 添加账户 -&…

织梦CMS:Error:check Snooping out of bounds 的解决办法

Error:check Snooping out of bounds @ D:wwwrootgdhgcwwwrootkjempletsdefaultarticle_article.htm原因:路径中包含了大写字母,使用 strpos 操作时区分大小写。解决方法:打开 include/dedetag.class.php 文件。 找到第325行,修改为:if (stripos($path, $this->clean(D…