汉诺塔问题以及线性表总结

文章介绍了汉诺塔问题的C语言实现,探讨了递归和栈在解决此类问题中的应用。同时,文章概述了线性表的概念,包括顺序存储和链式存储,以及插入、删除、查找和遍历等基本操作。线性表在数组、链表、栈和队列等数据结构中的重要性也得到了强调。
摘要由CSDN通过智能技术生成

1、不说废话,先上代码。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
/*
*Hanoni
*/

/*
*Source:原柱子
* Destination:目的柱
* Transit:运输柱
*/
void hanoi(int paraN, char paraSource, char paraDestination, char paraTransit) {
	if (paraN <= 0) {
		return;
	}
	else {
		hanoi(paraN - 1, paraSource, paraTransit, paraDestination);
		printf("%c -> %c \r\n", paraSource, paraDestination);
		hanoi(paraN - 1, paraTransit, paraDestination,paraSource);
	}// of if
}// of hanoi

/*
* Test the hanoi function
*/

void hanoiTest() {
	printf("--- addTest begins. ---\r\n");

	printf("2 plates\r\n");
	hanoi(2, 'A', 'B', 'C');

	printf("3 plates\r\n");
	hanoi(3, 'A', 'B', 'C');
}// of addToTest

/*
* The entrance. 
*/

int main() {
	hanoiTest();
	return 0;
}// of main

2、运行结果

3.图解

 

 4.注解

汉诺塔问题是一种很常见的递归问题

其中还涉及到栈的知识

利用递推公式可求解出时间复杂度

2个盘子------3次

3个盘子------7次

n个盘子-----2^(n-1)次

所以其时间复杂度为O(2^n)

其空间复杂度易知为O(n).

5.心得简易版

还是得把前面的线性表基础以及计算复杂度学扎实,后面的栈,队列等才更易上手。

6.线性表总结

(1).线性表是一种数据结构,它是由一组有序的元素组成,每个元素都有一个前驱(值域)和一个后继(指针域),除了第一个元素没有前驱,最后一个元素没有后继(一般成为头结点)。线性表可以用数组(顺序存储)或链表(链式存储)来实现,常见的线性表有数组、链表、栈、队列等。线性表的特点是元素之间的关系是一对一的关系,即每个元素只有一个前驱和一个后继。

(2).线性表的基本操作包括插入、删除、查找、遍历等。插入操作可以在指定位置插入一个元素,删除操作可以删除指定位置的元素,查找操作可以查找指定元素的位置或者判断元素是否存在,遍历操作可以依次访问线性表中的每个元素。

(3).线性表的优点是操作简单,易于实现和理解,缺点是插入和删除操作可能会导致元素的移动,影响效率。

(4).线性表的一些常见应用场景包括:

        1. 数组:用于存储一组有序的数据,可以快速访问任意位置的元素,但插入和删除操作效率较低。

        2. 链表:用于存储一组有序的数据,可以动态地添加和删除元素,但访问任意位置的元素效率较低。

        3. 栈:用于实现函数调用、表达式求值等操作,具有后进先出(LIFO)的特点。
        4. 队列
        5. 哈希表
        6. 排序算法

总之,线性表是一种非常基础和常用的数据结构,掌握线性表的基本概念和操作对于学习和理解其他数据结构和算法都非常重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值