自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 并查集

【代码】并查集。

2024-04-20 18:08:48 242

原创 树的存储结构(双亲,孩子, 孩子兄弟表示法)

【代码】树的存储结构(双亲,孩子, 孩子兄弟表示法)

2024-04-20 18:05:51 129

原创 线索二叉树

【代码】线索二叉树。

2024-04-20 18:01:20 94

原创 二叉树的遍历(先序,中序,后序,层次遍历)

【代码】二叉树的遍历(先序,中序,后序,层次遍历)

2024-04-20 17:55:09 363

原创 二叉树的链式存储结构(二叉链表)

【代码】二叉树的链式存储结构(二叉链表)

2024-04-20 17:51:19 112

原创 队列的链式存储结构

【代码】队列的链式存储结构。

2024-03-29 14:38:18 178

原创 队列的链式存储结构(循环队列)

【代码】队列的链式存储结构(循环队列)

2024-03-29 14:37:34 95

原创 栈的链式存储结构(链栈)

【代码】栈的链式存储结构(链栈)

2024-03-29 14:36:45 107

原创 栈的顺序存储结构(顺序栈)

【代码】栈的顺序存储结构(顺序栈)

2024-03-29 14:35:39 92

原创 线性表的链式表示(单链表,双链表,循环单链表,循环双链表,静态链表)

【代码】线性表的链式表示(单链表,双链表,循环单链表,循环双链表,静态链表)

2024-03-24 01:03:03 238

原创 线性表的顺序表示(顺序表)

【代码】线性表的顺序表示(顺序表)

2024-03-23 01:18:20 208

原创 第4章 树

对于大量的输入数据,链表的线性访问时间太慢,不宜使用。本章介绍一种简单的数据结构,其大部分操作的运行时间平均为。我们还会简述对这种数据结构在概念上的简单修改,它保证了在最坏情形下的上述时间界。此外,还讨论了第二种修改,对于长的指令序列它对每种操作的运行时间基本上是。 本章涉及的这种数据结构叫作二叉查找树(binary search tree)。在计算机科学中树(tree)是非常有用的抽象概念,因此,我们将讨论树在其他更一般的应用中的使用。 在这一章,我们将: 树(t

2024-01-17 00:09:44 928

原创 冒泡排序(C语言)

设置标志位flag,如果发生了交换flag设置为true(1);如果没有交换就设置为false(0)。这样当一轮比较结束后如果flag仍为false,即:这一轮没有发生交换,说明数据的顺序已经排好,没有必要继续进行下去。

2023-12-26 00:14:11 1420

原创 选择排序(C语言)

【代码】选择排序(C语言)

2023-12-26 00:14:08 349

原创 第5章 散列

本章讨论散列表(hashtable)ADT,不过它只支持二叉查找树所允许的一部分操作。散列表的实现常常叫作散列(hashing)。散列是一种以常数平均时间执行插入、删除和查找的技术。但是,那些需要元素间任何排序信息的操作将不会得到有效的支持。因此,诸如FindMin、FindMax以及以线性时间将排过序的整个表进行打印的操作都是散列所不支持的。

2023-12-25 00:38:02 918

原创 第7章 排序

如果最初的输入与前面一样,那么下面的图表示当前的状态。我们暂时假设所有的元素互异,后面将着重考虑出现重复元素时应该怎么办。作为一种限制性的情形,如果所有的元素都相同,那么我们的算法必须做相应的工作。可是奇怪的是,此时算法却特别容易出错。

2023-12-22 01:05:51 904

原创 第7章 排序

在这一章,我们讨论数组元素的排序问题。为简单起见,假设在我们的例子中数组只包含整数,虽然更复杂的结构显然也是可能的。对于本章的大部分内容,我们还假设整个排序工作能够在主存中完成,因此,元素的个数相对来说比较小(小于)。当然,不能在主存中完成而必须在磁盘或磁带上完成的排序也相当重要。这种类型的排序叫作外部排序(external sorting),将在本章末尾讨论外部排序。 我们对内部排序的考察将指出: 本章的其余部分将描述和分析各种排序算法。这些算法包含一些有趣的、重要的代码优化和

2023-12-17 22:52:44 1145

原创 第3章 表、栈和队列

像栈一样,队列(queue)也是表。然而,使用队列时插入在一端进行而删除则在另一端进行。

2023-12-04 21:39:57 853

原创 第3章 表、栈和队列

最后插入的元素可以通过使用Top例程在执行Pop之前进行检查。对空栈进行的Pop或Top一般被认为是栈ADT的错误。另一方面,当运行Push时空间用尽是一个实现错误,但不是ADT错误。

2023-12-04 20:40:02 1289

原创 第3章 表、栈和队列

例如表、集合、图以及它们的操作,它们都可以看作抽象数据类型,就像整数、实数和布尔量是数据类型一样。整数、实数及布尔量有与它们相关的操作,而抽象数据类型也有与之相关的操作。

2023-11-28 21:05:40 1021

原创 14.序列化和文件的输入/输出 保存对象

你已经奏出完美的乐章,现在会想把它储存起来。你可以抓个文房四宝把它记下来,但也可以按下储存按钮(或按下File菜单上的Save)。然后你帮文件命名,并希望这个文件不会让屏幕变成蓝色的画面。储存状态的选择有很多种,这可能要看你会如何使用储存下来的状态而决定。当然还有其他的选择。你可以将数据存进任何格式中。举例来说,你可以把数据用字节而不是字符来写入,或者你也可以将数据写成Java的primitive主数据类型,有一些方法可以提供int、long、boolean等的写入功能。

2023-11-07 22:36:10 397

原创 8.接口与抽象类 深入多态

你或许认为抽象类中的某些行为在没有特定的运行时不会有任何的意义。也就是说,没有任何通用的实现是可行的。想象一下通用的eat()方法会有什么结果?抽象的方法没有实体!因为你已经知道编写出抽象方法的程序代码没有意义,所以不会含有方法。

2023-11-05 23:16:12 139

原创 第1章 引论

在许多问题当中,一个重要的观念是:写出一个可以工作的程序并不够。如果这个程序在巨大的数据集上运行,那么运行时间就变成了重要的问题。我们将在本书中看到对于大量的输入如何估计程序的运行时间,尤其是如何在尚未具体编码的情况下比较两个程序的运行时间。我们还将看到彻底改进程序速度以及确定程序瓶颈的方法。这些方法将使我们能够找到需要大力优化的那些代码段。

2023-10-25 00:36:08 548

原创 9.构造器与垃圾收集器 对象的前世今生

栈与堆:生存空间在Java中,程序员会在乎内存中的两种区域:对象的生存空间堆(heap)和方法调用及变量的生存空间(stack)。当Java虚拟机启动时,它会从底层的操作系统取得一块内存,并以此区段来执行Java程序。至于有多少内存,以及你是否能够调整它都要看Java虚拟机与平台的版本而定。但通常你对这些事情无法加以控制。如果程序设计得不错的话,你或许也不太需要在乎。我们知道所有的对象都存活于可垃圾回收的堆上,但我们还没看过变量的生存空间。而变量存在于哪一个空间要看它是哪一种变量而定。这里说的“哪一种”不是

2023-10-19 22:41:15 208

原创 7.继承与多态 对象村的优质生活

在设计继承时,你会把共同的程序代码放在某个类中,然后告诉其他的类说此类是它们的父类。当某个类继承另一个类的时候,也就是子类继承自父类。以Java的方式说,这是“子类继承父类”。继承的关系意味着子类继承了父类的方法。当我们提及“类的成员”时,成员的意思就是实例变量和方法。举例来说,如果PantherMan是个SuperHero的子类,则PantherMan会自动地继承SuperHero的实例变量和方法,包括了suit、tights、specialPower、useSpecialPower()等。

2023-10-16 22:35:10 652

原创 6.认识Java的API 使用Java函数库

SimpleDotCom类中的checkYourself()方法中的for循环有问题每当玩家猜中某一格时,就将计数器加数,而不管之前是否就已经被猜中。需要一种机制来判别之前是否已经被猜中。虚拟的行占有7个各自,而DotCom会占有其中连续的3格。下面的虚拟列展示出占领4,5,6三格的DotComDotCom有个实例变量——一个int数组来保存DotCom对象的位置使用第二个数组,每当玩家猜中某一格时,就把相对的那一格设定称true,之后每次猜中都要检查是否在之前就已经被猜过了。

2023-10-16 20:09:08 128

原创 5.编写程序 超强力方法

从Java5.0(Tiger)开始,Java语言就有称为加强版的for循环,它能够很容易地逐个运行数组或其他集合(collection)的元素。(下一章会讨论其他类型的集合)。这是个很好的强化功能,因为这是for循环很常见的用途。我们会在讨论非数组的集合时再次看到加强版的for循环。

2023-10-10 21:47:16 142

原创 4.方法操作实例变量 对象的行为

同一类型的每个对象能够有不同的方法行为,任一类的每个实例都带有相同的方法,但是方法可以根据实例变量的值来表现不同的行为。play()会播放title值表示的歌曲,调用某个实例的play()可能会播放“Politik”而另一个会播放“Darkstar”,然而方法却是相同的小型犬的叫声与大型犬不同Dog类中的bark()方法会用size实例变量来决定使用哪一种声音。

2023-10-08 22:54:16 272

原创 3.primitive主数据类型和引用 认识变量

Java注重类型。它不会让你做出把长颈鹿类型变量装进兔子类型变量中这种诡异又危险的举动——如果有人对长颈鹿调用“跳跃”这个方法会发生什么样的悲剧?并且它也不会让你将浮点数类型变量放进整数类型的变量中,除非你先跟编译器确认过数字可以损失掉精确度(例如说舍去所有的小数值)。编译器会指出大部分的问题:这样的程序过不了编译器这关。为了要让类型安全能够发挥作用,必须声明所有变量的类型,指定它是个int类型或是个Dog类型。变量有两种口味:清凉的primitive主数据类型与香辣的对象引用。

2023-10-08 01:12:18 878

原创 2.类与对象 拜访对象村

对象是已知的事物对象会执行的动作实例变量(instance variable)方法(methods)对象本身已知的事物称为实例变量,代表对象的状态(数据),且该类型的每一个对象都会独立的拥有一份该类型的值。可以把对象当作实例。对象可以执行的动作称为方法。设计类时,也会设计出操作对象数据的方法。对象带有读取或操作实例变量的方法是很常见的。如闹钟对象会有一个变量来保存响铃时间,且会有getTime()与setTime()两个方法来存取该时间。对象带有实例变量和方法,它们都是类设计中的一部分。

2023-10-04 01:42:26 89

原创 1.基本概念 进入Java的世界

类存于源文件里面,方法存于类中,语句(statement)存于方法中源文件(扩展名为.java)带有类的定义。类用来表示程序的一个组件,小程序或许只会有一个类。类的内容必须包在花括号里面。类中带有一个或多个方法。在Dog这个类中,bark方法带有如何“汪汪“的指令。方法必须在类的内部声明。在方法的花括号中编写方法 应该执行的指令。方法代码是由一组语句所组成,可以把方法想象成是一个函数或过程。

2023-10-02 16:53:13 227

原创 第2章 算法

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。现实世界中的问题千奇百怪,算法当然也就千变万化,没有通用的算法可以解决所有的问题。算法定义中,提到了指令,指令能被人或机器等计算装置执行。它可以是计算机指令,也可以是我们平时的语言文字。在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。

2023-09-28 23:17:39 237

原创 第1章 数据结构绪论

数据类型是按照值的不同进行划分的。在高级语言中,每个变量、常量和表达式都有各自的取值范围。类型就用来说明变量或表达式的取值范围和所能进行的操作。在C语言中,按照取值的不同,数据类型可以分为两类:这些操作是如何实现的,对高级语言开发者来讲根本不重要。于是我们就会考虑,无论什么计算机、什么计算机语言,大都会面临着如整数运算、实数运算、字符运算等操作,我们可以考虑把它们都抽象出来。抽象是指抽取出事物具有的普遍性的本质。它是抽出问题的特征而忽略非本质的细节,是对具体事物的一个概括。

2023-09-27 21:45:50 173

原创 第14章 结构和其他数据形式

结构有两层含义。一层含义是“结构布局”,刚才已经讨论过了。结构布局告诉编译器如何表示数据,但是它并未让编译器为数据分配空间。下一步是创建一个结构变量,即是结构的另一层含义在结构变量的声明中,struct book所起的作用相当于一般声明中的int或float图14.1 一个结构的内存分配就计算机而言,下面的声明:是以下声明的简化:} library;/* 声明的右右花括号后跟变量名*/声明结构的过程和定义结构变量的过程可以组合成一个步骤。

2023-09-19 23:07:29 154

原创 第11章 字符串和字符串函数

1.字符串字面量(字符串常量)用双引号括起来的内容称为字符串字面量(string literal),也叫作字符串常量(string constant)。双引号中的字符和编译器自动加入末尾的\0字符,都作为字符串储存在内存中从ANSI C标准起,如果字符串字面量之间没有间隔,或者用空白字符分隔,C会将其视为串联起来的字符串字面量。如果要在字符串内部使用双引号,必须在双引号前面加上一个反斜杠(\)

2023-09-14 22:58:43 160

原创 第10章 数组和指针

本章介绍以下内容:关键字:static运算符:&、*(一元)如何创建并初始化数组指针(在已学过的基础上)、指针和数组的关系编写处理数组的函数二维数组人们通常借助计算机完成统计每月的支出、日降雨量、季度销售额等任务。企业借助计算机管理薪资、库存和客户交易记录等。作为程序员,不可避免地要处理大量相关数据。通常,数组能高效便捷地处理这种数据。第 6 章简单地介绍了数组,本章将进一步地学习如何使用数组,着重分析如何编写处理数组的函数。这种函数把模块化编程的优势应用到数组。

2023-09-11 22:14:32 392

原创 第9章 函数

该行告知编译器show_n_char()使用两个参数ch和num,ch是char类型,num是int类型。这两个变量被称为形式参数(formal argument,但是最近的标准推荐使用formal parameter),简称形参。和定义在函数中变量一样,形式参数也是局部变量,属该函数私有。这意味着在其他函数中使用同名变量不会引起名称冲突。每次调用函数,就会给这些变量赋值。注意,ANSI C要求在每个变量前都声明其类型。

2023-09-03 01:15:37 255

原创 第8章 字符输入/输出和输入验证

本章介绍以下内容:更详细地介绍输入、输出以及缓冲输入和无缓冲输入的区别如何通过键盘模拟文件结尾条件如何使用重定向把程序和文件相连接创建更友好的用户界面在涉及计算机的话题时,我们经常会提到输入(input)和输出(output)。我们谈论输入和输出设备(如键盘、U盘、扫描仪和激光打印机),讲解如何处理输入数据和输出数据,讨论执行输入和输出任务的函数。本章主要介绍用于输入和输出的函数(简称I/O函数)。

2023-08-31 23:56:24 134

原创 第7章 C控制语句:分支和跳转

getchar()函数不带任何参数,它从输入队列中返回下一个字符。例如,下面的语句读取下一个字符输入,并把该字符的值赋给变量ch:该语句与下面的语句效果相同:putchar()函数打印它的参数。

2023-08-17 00:56:50 172

原创 第6章 C控制语句:循环

对C而言,表达式为真的值是1,表达式为假的值是0数组(array)是按顺序储存的一系列类型相同的值用于识别数组元素的数字被称为下标(subscript)、索引(indice)或偏移量(offset)。下标必须是整数,而且要从0开始计数可以通过外层循环控制内层循环,在每次外层循环迭代时内层循环完成不同的任务遵循模块化(modularity)的原则。模块化隐含的思想是:应该把程序划分为一些独立的单元,每个单元执行一个任务。这样做提高了程序的可读性。

2023-08-08 13:29:43 191

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除