C++数据结构和算法
Kegi_
励志学好C++的小白
展开
-
在一些复杂的数据结构中,内部元素本身的类型可能是指向其他对象的指针。
另一个例子是哈希表数据结构中的桶。这种情况下,该数据结构内部的元素实际上只是指向其他对象的指针,而不是实际存储数据的内存空间。因此,当这种数据结构被传递或操作时,外部更多关注的往往是其所指对象的大小,而不是指针本身的大小。当需要操作链表时,我们通常关心的是链表中存储的数据,而不是每个节点的指针大小。因此,内部元素的指针大小并不是我们最关注的问题,而是所指对象的大小。在这种情况下,外部更多关注的则往往是其所指对象的大小,而不是内部元素的指针大小,因为所指对象的大小直接关系到数据结构的性能和效率。原创 2024-05-02 16:40:54 · 133 阅读 · 0 评论 -
宏定义的应用与注意事项
宏定义是C ++中的一种预处理指令,用于在编译阶段之前对代码进行简单的替换。通过宏定义,可以将一个标识符定义为一个常量、一个表达式或者一段代码,方便在代码中多次使用。宏定义一般放在源代码的开头,可以定义在全局作用域或者局部作用域中。替换内容可以是任何有效的C ++表达式,包括整型、浮点型、字符型、字符串和代码块等。因此,在使用宏定义时,需要在简化代码和代码可读性之间做出权衡,并且要遵循一些编码规范和最佳实践,以确保代码的正确性和可维护性。在C ++中,可以使用。原创 2024-04-09 20:21:05 · 307 阅读 · 0 评论 -
栈的现实应用
这用栈结构正好合适,只要碰到左括号,就将此左括号进栈,不管表达式有多少重括号,反正遇到左括号就进栈,而后面出现右括号时,就让栈顶的左括号出栈,期间让数字运算,这样,最终有括号的表达式从左到右巡查一遍,栈应该是由空到有元素,最终再因全部匹配成功后成为空栈。规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。8.接下来是符号“/”,因此,栈顶的2与10出栈,10与2相除,得到5,将5进栈。10.结果是20出栈,栈变为空。原创 2024-04-07 13:15:14 · 136 阅读 · 0 评论 -
起泡排序(Bubble Sort)的最坏复杂度
例如,可以设置一个标志位来表示每次内循环是否发生了交换,如果没有交换则说明数组已经是有序的,可以提前退出外循环。在每次外循环中,内循环会从数组的第一个元素到倒数第i个元素进行比较和交换,将较大的元素往后冒泡。因此,总的比较次数为n*(n-1),即n^2-n。当输入数组已经按照逆序排列时,需要进行最多的比较和交换操作,从而导致最坏时间复杂度为n^2。起泡排序(Bubble Sort)的最坏时间复杂度为n^2的原因是因为它要进行n次外循环,每次循环都要比较相邻的两个元素并进行位置交换。原创 2024-03-06 17:18:01 · 351 阅读 · 0 评论 -
二分查找-哨兵在元素区间内部说明及举例
在函数内部,我们使用std::binary_search函数进行二分查找,并将迭代器范围的起始位置设置为数组的第一个元素,结束位置设置为数组的最后一个元素加 1。因此,如果要使用std::binary_search函数查找一个元素是否存在于一个有序数组中,并且需要将哨兵元素包含在区间内部,则可以将迭代器范围的起始位置设置为数组的第一个元素,结束位置设置为数组的最后一个元素加 1。如果迭代器范围中包含一个或多个元素,并且目标值在迭代器范围内,则std::binary_search函数会返回true。原创 2024-03-01 10:30:51 · 347 阅读 · 0 评论 -
C++数据结构与算法先修概要(MOOC-邓俊辉)
根据期望值的线性律,我们可以计算E(Z) = E(X1) + E(X2) + E(X3) = 0.5 + 0.5 + 0.5 = 1.5。我们需要证明当 n=k+1 时公式也成立,即 1 + 2 + ... + k + (k+1) = ((k+1)*((k+1)+1))/2 成立。期望值的线性律则是指若两个随机变量X和Y,以及常数a和b,有E(aX + bY) = aE(X) + bE(Y),即期望值可以按比例相加。在上面的例子中,有两个名为add()的函数,但参数类型不同。虚函数允许在派生类中进行重写。原创 2024-02-10 16:25:43 · 984 阅读 · 0 评论