一 数据结构(算法)的介绍
1 数据结构的介绍
a 数据结构是一门研究算法的学科,自从有了编程语言也就有了数据结构。学好数据结构可以编写出更加漂亮、更加有效率的代码。
b 要学习好数据结构就要多多考虑如何将生活中遇到的问题用程序去实现解决。
c 程序 = 数据结构 + 算法
二 数据结构和算法的关系
1 算法是程序的灵魂,为什么有些网站能够在高并发,和海量吞吐情况下依然坚如磐石?大家可能会说:网站使用了服务器群集技术、数据库读写分离和缓存技术(比如 Redis 等),那如果再深入的问一句,这些优化技术又是怎样被那些天才的技术高手设计出来的呢?
2 思考一个问题,是什么让不同的人写出的代码从功能看是一样的,但从效率上却有天壤之别?拿在公司工作的实际经历来说,某程序员是做服务器的,环境是 UNIX,功能是要支持上千万人同时在线,并保证数据传输的稳定,在服务器上线前,做内测,一切 OK,可上线后,服务器就支撑不住了。公司的 CTO 对代码进行优化,再次上线,坚如磐石。其实程序是有灵魂的,它就是算法。如果不想永远都是代码工人,那就花时间来研究下算法吧!
三 几个实际编程中遇到的问题
1 五子棋游戏
如何判断游戏的输赢,并可以完成存盘和继续上局的功能?
2 约瑟夫问题
a Josephu 问题为:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。
b 可以用一个不带头结点的循环链表来处理 Josephu 问题:先构成一个有 n 个结点的单循环链表(单向环形链表),然后由 k 结点起从 1 开始计数,计到 m 时,对应结点从链表中删除,然后再从被删除结点的下一个结点,又从 1 开始计数,直到最后一个结点从链表中删除算法结束。
3 邮差问题
4 最短路径问题
5 汉诺塔问题
6 八皇后问题