- 博客(33)
- 资源 (30)
- 收藏
- 关注
原创 【第四节】C/C++数据结构之树与二叉树
二叉树(Tree)是n个节点的有限集合,该集合为空集(或称为空二叉树),或者由一个根节点和两颗互不相交的、分别称为根节点的左子树与右子树的二叉树组成。A. 所有节点都只有左子树的二叉树叫左斜树,所有节点都只有右子树的二叉树叫右斜树,这两者统称为斜树;B. 在一棵二叉树中,如果所有分支节点都存在左子树与右子树,并且所有叶子都在同一层次上,这样的二叉树称为满二叉树;
2024-06-07 20:48:15 1555 4
原创 【第三节】C/C++数据结构之栈与队列
栈(Stack)可以看成是一种特殊的线性表。限定仅只能在表尾端进行插入和删除的线性表。栈顶:表尾端被称之为栈顶。栈底:和表尾相对应的另一端,称之为栈底。时间有序表:LIFO (Last In First Out)后进先出特征的线性结构。public:AbsStack ( ) { } // 默认构造函数virtual ~ AbsStack ( ) { } // 析构函数// 判栈空吗?// 判栈满吗?//将栈清空。//新结点进栈。// 栈顶结点出栈。
2024-06-05 09:58:18 1536 1
原创 【第二节】C/C++数据结构之线性表
链表中最简单的一种是单向链表,它包含两个域,一个数据域和一个指针域。这个链接指向列表中的下一个节点,而最后一个节点则指向一个空值。单向链表通常由一个头指针(head),用于指向链表头。单向链表有一个尾结点,该结点的指针部分指向一个空结点(NULL)。// 定义链表节点结构体T data;Node* next;// 单链表类模板private:int size;public:// 插入元素到链表头部size++;// 删除链表头部元素if (head!
2024-06-04 11:26:12 1710 3
原创 【第一节】数据结构和算法绪论
直观地说,数据是描述客观事物的数字、字母和符号,是计算机程序使用和加工的“原料”。数据的基本单位是数据元素,性质相同的数据元素的集合叫做数据对象。数据对象中的元素彼此之间的相互关系叫做结构。图书馆的一本图书由书名、作者、出版社等数据来描述,根据需要我们选择其中的若干项组成一个数据元素来对应一本书。图书馆的编目表反映了书与书之间的关系,是数据元素之间的结构。当然我们还应注意到书是具体地放在某个书架上的,它是编目表的物理实现。图书馆从两方面管理图书:物理的藏书和逻辑的编目表。这就是图书馆的结构。
2024-06-03 20:08:56 1109 1
原创 【第十三节】C++控制台版本坦克大战小游戏
本项目是一款基于C++语言开发的控制台版本坦克大战游戏,旨在为玩家提供一个经典而又充满挑战的战斗体验。游戏在Windows系统上运行,使用Visual Studio 2015或更高版本进行开发。通过运用C/C++的核心知识点和数据结构,游戏实现了丰富的功能和复杂的逻辑。
2024-05-31 17:25:08 741
原创 【第十二节】C++控制台版本贪吃蛇小游戏
本游戏是一款基于C++语言开发的控制台版本贪吃蛇游戏,旨在为玩家提供一个简单而有趣的游戏体验。游戏在Windows系统上运行,使用Visual Studio 2015或更高版本进行开发。
2024-05-31 17:11:06 925
原创 【第十一节】C/C++的预处理及命名空间
宏定义是预处理的另一个重要功能,它允许程序员定义常量或宏函数。宏定义在预处理阶段进行文本替换,不占用任何存储空间,也不分配内存地址。常量宏定义通常用于表示一个不会改变的值。在代码中,每当出现PI时,预处理器都会将其替换为3.14159。在C++中,预处理器指令、静态变量和函数等特性可能会引起命名冲突,因为它们在编译时会直接插入到代码中,而不会考虑命名空间。然而,命名空间提供了一种机制来解决这种问题,通过将相关的标识符(如变量、函数、类等)组织在同一个命名空间中,可以避免命名冲突。
2024-05-31 16:28:06 907
原创 【第十节】C++异常处理
/栈满异常类public:cout << "异常:栈满不能入栈" << endl;//栈空异常类public :cout << "异常:栈空不能出栈" << endl;m_nTos = 0;if (!private://报错i < 5;
2024-05-31 14:10:08 840 1
原创 【第九节】C++运算符重载
运算符重载是C++的一个特性,允许程序员将运算符的定义扩展到对象上,目的是提高代码的直观性和可读性。简单的运算符表达式通常比函数调用更简洁易懂。系统为基本数据类型提供了预定义的运算符,如整数加法。对于字符串拼接,通常使用函数如strcat,但也可以通过重载“+”运算符来实现,例如。在C++中,除了条件运算符“?:”、指针分量运算符“->”、分量运算符“.”、范围解析运算符“::”和取大小运算符“sizeof”外,其他运算符都可以被重载。重载时必须保持原运算符的优先级、结合性、操作数个数和语法结构不变。
2024-05-31 09:49:52 933
原创 【第八节】C++的静态成员和友元函数
全局对象,如同程序世界中的公共广场,提供了数据共享的便捷途径,然而其无处不在的可见性却带来了安全隐患。因此,在编写程序时,我们应谨慎使用全局对象,转而寻求更为安全的方法。实现类对象间的数据共享,静态成员是我们的得力助手。静态成员分为静态数据成员和静态成员函数,它们如同桥梁,连接着类的每一个对象,确保数据的一致性和共享性。友元函数,虽是普通的C++函数,却拥有特殊权限,能够触及类的保护或私有领域。这一特性极大地方便了编程,提升了效率,但同时也挑战了类的封装原则。
2024-05-31 09:47:59 857 1
原创 【第七节】C++的STL基本使用
长期以来,软件行业一直致力于打造一种可重复利用的资源以及相应的构建方法,旨在确保程序员的心血不因时间的流逝或人员的变动而付诸东流。从简单的函数、类别,到复杂的函数库、类别库以及各种组件,再到模块化设计和面向对象的编程范式,这一切努力均是为了提高代码复用性。然而,复用性的实现必须依托于一套明确的标准。令人遗憾的是,在许多软件开发环境中,即便是最基础的数据结构和算法,也未能形成统一的标准。这导致大量程序员不得不重复进行许多前人已经完成的工作,仅仅是因为他们手中没有现成的、可复用的程序代码。
2024-05-30 10:49:56 1078
原创 【第六节】C++中的模板
模板是C++编程中的一种强大工具,它允许程序员创建具有通用数据类型的函数库和类库。作为支持参数多态性的机制,模板极大地增强了代码的复用性和灵活性。在C++语言中,程序的结构主要由函数和类组成,而模板则提供了两种关键的形式:A:函数模板- 这是一种定义,允许函数根据传递的参数类型自动适应,从而实现对不同数据类型的通用操作。B:类模板- 类似于函数模板,类模板允许创建可以处理多种数据类型的类,使得类的实例化可以根据实际使用的数据类型进行定制。
2024-05-30 09:46:22 1032
原创 【第五节】C++的多态性与虚函数
面向对象程序设计语言的三大核心特性是封装性、继承性和多态性。封装性奠定了基础,继承性是实现代码重用和扩展的关键,而多态性则是功能的扩充。多态性体现在对不同类的对象发送相同的消息时,会产生不同的行为。这里所说的消息主要是指对类成员函数的调用,而不同的行为则对应着不同的实现方式。在C++中,实现多态性的方法包括:函数重载运算符重载模板虚函数函数重载是多态性的一种基本形式,它允许在同一作用域内,相同的函数名对应不同的实现。函数重载的实现条件是函数参数的类型或个数必须有所区别。
2024-05-29 13:46:00 1205
原创 【第四节】C++的派生与继承
单继承的基本格式如下:class<派生类名>:<继承方式><基类名>//<派生类新成员的定义>其中,派生类名就是派生类的名字,并且派生类是按指定的继承方式派生的。继承方式有:A. public 公有继承B.private 私有继承C.protected 保护继承public:private:public:private:多继承的定义方式和单继承差不多。class<派生类名>:<继承方式1)<基类名1〉,<继承方式2><基类名2>,……
2024-05-29 11:10:41 1154
原创 【第三节】类的构造和析构函数
构造函数是一种独特的成员函数,其名称与类名完全一致,且不具备返回值类型,因此无法为其定义返回类型,亦不可使用void。在常规情况下,构造函数应被声明为公有函数。然而,将其声明为私有函数则有其特殊目的,例如在单例模式中使用。当创建类类型的新对象时,系统会自动调用相应的构造函数。class CDesk { //定义一个办公桌类public:CDesk() {cout << "我是构造函数"<<endl;//全局对象//局部对象//堆对象。
2024-05-28 17:01:57 1069
原创 【第二节】面向对象编程C++的类
类是对现实世界中客观事物的抽象表示,它将具有共同属性的多个事物归为一类。类的具体实例被称为对象。类是一种复杂的数据类型,它将不同类型的数据及其相关操作封装成一个整体。类体现了对数据的抽象性、隐藏性和封装性,确保了数据的安全性和操作的一致性。类对象的行为由其内部的数据结构和相关操作共同决定,而外部行为则通过操作接口来实现。用户主要关注的是操作接口所提供的服务,这些服务定义了对象可以执行的操作。
2024-05-28 12:01:08 930 1
原创 【第一节】从C语言到C++
函数重载的本质,以上的同名函数,在C++看来实际上是不同的函数名称,C++为了支持这种特性,进而提出了名称粉碎/名字改编(name managling)机制,以上面的函数为例,他们的函数名分别不同。同时,增加了对面向对象编程的完全支持。在以上这个例子中,调用函数的时候,可以传递两个参数,也可以传递三个,四个,五传递的参数不足五个的时候,后面的会默认的被传递0。在C++中,还有一个不错的机制,叫做默认参数,函数声明或者定义的时候,可以给形参赋一些默认值,调用函数时,若没有给出实参,则按指定的默认值进行工作。
2024-05-27 16:50:30 951
原创 【第零节】Microsoft Visual Studio的安装与基本使用
工欲善其事,必先利其器,写代码当然要准备好工具了。这章节是c语言编程入门的前置篇,教小白安装代码编辑器和简单使用。编程IDE市面上有很多种,有简单的也有复杂的,这里主要是介绍微软官方的Visual Studio IDE,简称VS。
2023-12-29 20:40:50 1038 1
原创 【第十五节】C语言小项目(windows控制台版本坦克大战)
大家可以先关注一波,后续继续更新各种技术免费专栏,涉及数据结构与算法,c/c++ QT/duilib等客户端开发,服务器开发,音视频开发,驱动开发,逆向安全,游戏开发等等有关技术栈,还有各种热门编程技术如rust, java,go, javascript, python, php, c#等等,遍及各种平台如android, ios, windows, unix, linux等等,让新手从入门到实战,从IT学习者身份顺利过渡到职场人士。为了巩固之前学习的C语言知识点,提高C语言的实践能力,锻炼逻辑思维。
2023-12-09 15:01:06 385
原创 【第十四节】C语言小项目(windows控制台版本密码本)
运用所学C语言的基础知识,设计一个密码本,方便解决日常生活中遇到的各类账号密码记录问题。实现完该项目,大致能巩固C语言的基础知识的应用。对数据类型,各种运算符,控制结构,输入输出,数组和指针,函数结构体,文件读写等有一定的深刻的认识。初学者做项目途中肯定遇到不少问题,通过调试和懂得网上寻找答案也一定能解决。1)可以安全地保存用户的各种账号密码,并在用户退出后再次打开软件时,准确地恢复这些数据,确保用户不会丢失任何信息。
2023-12-06 18:06:49 416 1
原创 【第十三节】C语言小项目(windows控制台版2048小游戏)
1)数组和二维数组:用来表示游戏中的格子,每个格子是一个二维数组,行表示列数,列表示格子的状态(是否有数字、数字是多少)。方便表示游戏中的方块,包括方块的位置和数字,以及实现方块的移动和合并。4)合并方块:当两个相同数字的方块碰到一起时,它们会合并成一个价值为两者之和的新方块。5)判断游戏结束:如果棋盘被数字填满,无法进行有效移动,或者出现2048的方块,则游戏结束。1)游戏开始时,会出现一个4x4的方格,上面会有两个随机数字方块(通常是2或者4)。3)棋盘被数字填满,无法进行有效移动,判负,游戏结束。
2023-12-05 20:49:55 247
原创 【第十二节】C语言的文件操作
文件是计算机中存储数据的基本单位,而C语言是一种通用的编程语言,需要提供一些基本的输入/输出函数来读取和写入文件中的数据。文件操作可以让程序读取存储在文件中的数据,或者将数据写入到文件中,从而实现对文件的读写操作。C语言的文件操作函数可以实现对文件的打开、关闭、读取、写入、定位等操作,使得程序可以更加灵活地处理文件数据。这些函数定义在C标准库中,通过包含头文件来使用这些函数。通过使用这些文件操作函数,程序可以更加方便地进行数据的输入/输出操作,实现数据的存储和读取。
2023-12-05 11:05:26 207
原创 【第十一节】C语言的内存分区和堆内存使用
堆内存的设计是为了满足程序在运行时的动态内存分配需求。在早期的计算机系统中,内存管理通常是静态的,即在编译时确定所有变量的内存分配。这种方式的缺点是缺乏灵活性,因为预先分配的内存可能会被浪费或者不足以满足程序运行时的需求。为了解决这个问题,程序员开始使用堆内存来动态地分配和释放内存。堆内存的设计使得程序员可以在运行时根据需要创建和释放内存,从而更好地适应程序运行时的需求。这种灵活性使得程序可以更加高效地使用内存资源,并且可以实现更复杂的数据结构和算法。此外,堆内存的设计也使得程序可以更加模块化。
2023-12-04 12:25:14 269
原创 【第十节】C语言的结构体联合体及新类型定义
结构体是一种用户自定义的数据类型,可以包含多个不同类型的数据。结构体的成员可以是基本数据类型,也可以是其他结构体。联合体也是一种用户自定义的数据类型,但它可以存储多个不同类型的数据,但在任何时候只能存储其中一个成员的值。联合体的成员必须是相同的数据类型。下面我们来一一介绍他们的使用和区别。1)原始形式struct类型名1 成员名 1;类型名2 成员名 2;......类型名n 成员名 n;} 结构体变量名 = {初始化元素1,初始化元素2};
2023-12-02 18:24:58 417 2
原创 【第九节】C语言的指针
C语言的指针是由其自身的内存管理机制而来的。在早期的C语言中,内存管理主要由程序员负责,每个变量都会分配一段内存,变量的值存储在该地址的字节中。这使得通过直接操作内存地址来操作变量成为可能。这种通过直接操作内存地址来访问或操作数据的方式,就是指针的基本概念。用于变量的存储和访问:通过指针,程序可以直接访问和操作内存中的数据,这在需要动态分配和回收内存的场景中尤其重要。用于数组操作:指针允许程序直接操作数组的每一个元素,而无需使用循环。用于函数参数传递:通过指针,函数可以间接地访问和修改其参数。
2023-12-01 15:28:00 222 1
原创 【第八节】C语言的函数
函数是 C 语言中非常重要的部分,是设计大型程序的基础。通过使用函数,可以使代码更加模块化和可复用,提高代码的可读性和可维护性,同时还可以提高程序的效率和可靠性。返回值类型 函数名(参数类型 形式参数名1,参数类型 形式参数名2,...)函数语句;return 返回值;1. 返回值类型: 函数调用表达式的值类型,需和return 之后的数据类型一致。假如函数没有返回值,则可以写 void 在此处。2. 参数类型: 形式参数的数据类型,调用函数的时候,可以给函数传递的数据类型。
2023-11-27 16:16:33 205 1
原创 【第七节】C语言常见的数组
数组是C语言中一个非常基础和重要的数据结构。数组的起源可以追溯到早期的计算机编程语言,如Fortran和Algol。这些语言在设计和实现过程中,为了解决如何高效地存储和访问一组相同类型的数据,引入了数组这个概念。数组的作用主要是为了提高代码效率和可读性。通过将同类型的数据存储在连续的内存空间中,数组可以提供一种简单且直观的方式来组织和处理一组数据。使用数组的索引,我们可以快速地访问和操作数组中的特定元素,而不需要为每个元素单独分配内存空间。
2023-11-26 13:47:01 668 1
原创 【第六节】C语言程序流程结构
一个程序应包括对数据的描述和对数据处理的描述。对数据的描述,即数据结构。对数据处理的描述,即算法,算法是为解决一个问题而采取的方法和步骤。我们中学学数学都画过流程图,流程图也是方法和步骤的体现。关于程序运行的步骤和方法,就是接下来我们要学习的程序运行结构。C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。这三种结构都具有一个入口和一个出口。顺序结构:程序按顺序执行,不发生跳转。选择结构:依据是否满足条件,有选择的执行相应功能。循环结构:依据条件是否满足,循环多次执行某段代码。
2023-11-25 17:44:52 132
原创 【第四节】C语言的输入输出函数
为了让程序和用户进行交互,这一节我们来学习一些有关字符与字符串以及其他数据类型重要的输入输出函数,比如下面一些函数。printf: 这是一个标准的C库函数,用于打印格式化的输出到 stdout(屏幕)。scanf: 这也是一个标准的C库函数,用于从 stdin(键盘)读取格式化的输入。putchar: 这个函数用于输出一个字符到 stdout。getchar: 这个函数用于从 stdin 读取一个字符。_getch: 这个函数在非 Windows 系统上不可用,无回显的从键盘获取一个字符。
2023-11-23 14:19:32 173
原创 【第二节】初次认识C语言
本文初步介绍C语言的基本特点,万丈高楼平地起,我们从最基础的讲起。C语言的预处理是C语言源程序编译过程中的一个重要阶段,它是在编译的第一阶段进行的。宏定义指令:如 #define 指令,预处理器会将其替换为指定的内容。包含文件指令:如 #include 指令,预处理器会将其替换为指定文件的内容。条件编译指令:如 #if、#ifdef、#ifndef、#else、#elif 和 #endif 指令,预处理器会根据条件判断是否进行编译。
2023-11-06 21:29:36 61
C++ 控制台版本坦克大战游戏
2024-05-31
C++ 实现贪吃蛇小游戏
2024-05-31
C语言控制台版本坦克大战小游戏
2023-12-09
C语言windows控制台版本密码本小程序
2023-12-06
调试器12-23项目例子
2018-05-14
C/C++调试器
2018-05-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人