请先看汉诺塔代码块:
#include <stdio.h>
/**
* Hanoi.
*/
void hanoi(int paraN, char paraSource, char paraDestination, char paraTransit) {
printf("%d The address of paraSource is %d, the address of paraDestination is %d, the address of paraTransit is %d.\r\n", paraN, ¶Source, ¶Destination, ¶Transit);
if(paraN <= 0) {
//printf("%d The address of paraSource is %d, the address of paraDestination is %d, the address of paraTransit is %d.\r\n", paraN, ¶Source, ¶Destination, ¶Transit);
return ;
}else {
//printf("%d The address of paraSource is %d, the address of paraDestination is %d, the address of paraTransit is %d.\r\n", paraN, ¶Source, ¶Destination, ¶Transit);
hanoi(paraN - 1, paraSource, paraTransit, paraDestination);
printf("%c -> %c\r\n", paraSource,paraDestination);
hanoi(paraN - 1, paraTransit, paraDestination, paraSource);
}
printf("%d The address of paraSource is %d, the address of paraDestination is %d, the address of paraTransit is %d.\r\n", paraN, ¶Source, ¶Destination, ¶Transit);
}
/**
* Test the hanoi function.
*/
void hanoiTest() {
printf("---- addToTest begins. ----\r\n");
printf("2 plates\r\n");
hanoi(2, 'A', 'B', 'C');
printf("3 plates\r\n");
hanoi(3, 'A', 'B', 'C');
printf("---- addToTest ends. ----\r\n");
}
/**
* The entrance.
*/
int main()
{
hanoiTest();
return 0;
}
运行结果:
其时间复杂度为O(2^n),其计算公式为2^n - 1.
通过地址打印,感觉有点迷糊,不是很明白这个地方,慢慢消化理解吧。
线性表总结:
不知不觉线性表这一章节已经全部学习完了,通过这一章的学习,让我了解到很多,有一些专用名词,例如时间复杂度,空间复杂度等,也知道了线性表包含两个部分:
一:顺序表
二:链表
链表中又包括单链表、循环链表和双向链表。
同时也通过学习顺序表和链表的比较,知道了两者之间的差异性。
在实际应用中,我们要根据实际情况来判断要用什么来更节省空间和时间来解决问题。
通过老师对这章内容的讲解以及抄写相应的代码,特别是内存地址的打印,让我对计算机中的定义变量的内存分配和地址分配有了很大的好奇心,自己也初步掌握了顺序表和单链表的初始化,删除,插入等基本操作,代码速度和代码规范也有了很大的提升,也意识到了代码注释的重要性。
希望在今后的学习中,不断提高代码能力,迎难而上,多思考多理解,保持学习的兴趣,让自己变得更加优秀。