- 博客(33)
- 收藏
- 关注
原创 OJ习题之——圆括号编码
第一行是一个整数t(1 <= t <= 10),表示测试数据的组数。每个测试数据的第1行是一个整数n(1 <= n <= 20),第2行是一个圆括号串的P-序列,包含n个正整数,以空格隔开。wn编码,对每一个右圆括号a,从与之匹配的左圆括号开始到a之间的右圆括号的数目用wi表示。(1)用一个整数序列P=p1 p2 …输出t行,对每个测试数据所表示的P-序列,输出对应的W-序列,占一行,包含n个整数。sn是一个规则的圆括号字符串。编程把一个圆括号串S的P-序列转化为W-序列。S为:(((()()())))
2024-03-06 11:25:51
540
原创 排序算法之——归并排序
数据的合并过程不仅仅是将短数据合成长的,否则这仅仅是原来分解数据的逆过程。数据的合并过程中牵扯到对两组数据的排序再合并。假设待排序的数据的容量为n,则完全二叉树的高度为log2(n+1)(向上取整),每一层遍历n个数据,最终用时n。由于每次归并两组数据的过程中都借用了临时数组tmpArray[],且tmpArray[]的长度至少要等于两组数据的元素个数之和,故最终的空间复杂度为O(n)。在将临时数组tmpArray[]中的数据放回原数组array[]的过程中,要特别注意下标问题。归并排序是一种稳定排序。
2024-02-23 20:11:17
732
原创 排序算法之——选择排序
依此类推,总的时间复杂度T(n) = (n-1) + (n-2) + …③在剩余的array[i]–array[n-2](array[i+1]–array[n-1])集合中,重复上述步骤,直到集合剩余1个元素。每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。②若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换;①在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素;
2024-02-23 20:10:29
288
原创 排序算法之——希尔排序
例如,对于一个10000容量的数据,我们对其进行插入排序,此时用时:10000 * 10000 = 100000000 = 1亿。比如,我们将数据分成100组,每组100个数据,则需要的总时间:100 * 100 * 100 = 1000000 = 一百万。给定一组数据:9,1,2,5,7,4,8,6,3,5。同时多次分组,每一次都会使数据朝着有序的方向趋近。由于插入排序是一种数据越有序效率越高的排序方法,希尔排序分组的方式和多次分组的策略使得其效率大大增加。希尔排序的时间复杂度不好计算,因为。
2024-02-22 19:56:19
481
原创 C语言OJ题——1091装箱问题
(4)3 * 3:该产品也需要自己占用一个箱子,但是由于是6的一半,也就是说4个3 * 3的产品正好可以装满一个整箱子,因此我们可以根据3 * 3的产品数来对4求余,如果余数为0,说明正好是4的倍数,直接除以4就是所需的箱子数,不再有剩余空间。1则可以放27个),同样,余数为2的话,则剩余的空间为18,最多可以放3个2 * 2和6个1 * 1(或者18个1 * 1),最后一种就是余数为3,则剩余空间为9,最多只能放1个2 * 2和5个1 * 1(或者9个1 * 1)。来分析每种型号的产品占用多大的箱子。
2024-02-21 08:00:00
882
原创 Java实现简易图书管理系统
这是一个基本的图书馆里系统,没有涉及对图书的排序、有多本图书同名等等其他复杂情况。后续我会慢慢补充并完善相关功能。BorrowOperation类。DeleteOperation类。ReturnOperation类。SearchOperation类。ExitOperation类。ShowOperation类。AddOperation类。IOperation接口。AdminUser类。NormalUse类。
2023-11-14 16:59:26
935
6
原创 C语言有关动态内存管理的几道经典笔试题
这句操作后,临时变量p被销毁,此时str的值仍是NULL,所以在下一步操作 strcpy(str, “hello world”);中,涉及到对空指针的解引用操作,因此程序崩溃。说明:程序运行结果是打印出了 hello,但是有漏洞,没有对动态开辟的内存进行释放。此外,上述代码的另外一个问题是没有对malloc函数开辟的内存进行回收,造成内存泄漏。也就是说,某个函数非动态开辟的内存空间,在该函数调用结束后,系统会回收其开辟的空间。结果分析:虽然程序最终打印出了world,但是程序本身有错误。
2023-10-03 21:01:59
155
1
原创 C语言动态内存分配相关函数介绍
我们已经掌握的内存开辟方式有:但是上述的开辟空间的方式有两个特点:其中形参size表示的是要动态开辟的内存大小,单位是字节。这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。
2023-10-03 10:27:48
193
1
原创 C语言模拟实现memmove函数
当然,这么做的前提是src指向的内存的地址小于dest指向的内存地址,当src指向的内存的地址大于dest指向的内存地址时,从后往前复制移动依然会出现之前的问题(有兴趣的读者可以仿照上述示意图自己探究下,这里不再赘述)。思考,以上结果实现的前提是,arr2数组和arr1数组指向的内存空间没有重叠的部分,如果有重叠的部分,我们自己实现的函数my_memmove能否满足要求呢?)将其转换为字符型指针。此时,已经将arr1数组中的前3个元素2,4,6替换成了arr2前三个元素1,2,3。dest指向的内存地址,
2023-09-22 14:31:30
355
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅