算法与数据结构

发布 2021-05-02 16:44:28 阅读 7016

众所周知,程序设计的过程,就是一个“分析问题、建立数学模型、选择数据结构、设计算法、翻译成计算机语言”的过程。在这个过程中,最后一步就是所说的编程序(更确切的说是编写**)。学会一两门编程语言或者会用一两种开发工具仅仅是学会了最后一步。

现有的计算机大部分都基于冯诺依曼体系结构,在该体系结构中,程序就是数据和**的集合,数据是程序操纵的对象,其组织方式就是数据结构;**则是程序的控制流程,负责对数据做某种转换,建立输入和输出数据之间的某种一一映射关系,这种映射变换的流程就是所谓的算法步骤。

所以,从这个意义上说,程序=算法+数据结构。

随着现代软件工业的飞速发展,软件开发方式和过去相比已经有了很大的变化,各种开发工具如雨后春笋般不断涌现。这些开发工具大部分都能够自动完成程序中一些机械的**,并隐藏了其中的实现细节。再加上面向对象程序设计思想以及组件技术的发展,使得程序编写看上去就像搭积木一般简单。

对于一些简单的应用程序,程序员关注的焦点不再是程序的算法和数据结构,而是用户界面,可重用性、开发效率等。

在这样的背景下,初学编程者很容易产生错觉,以为学会用vb、delphi做一个用户界面就算会编程了,甚至有人连vc和c++是不是一回事都搞不清楚,数据结构和算法更是鲜有问津者。然而,无论软件工程如何发展,无论开发工具如何进步,只要我们的计算机还是基于冯诺依曼体系,数据结构和算法仍然是程序的核心,永远不会被淘汰。

也许有人会说,“我只要会用别人写的类库就行了,不是有stl吗,都已经把常用的数据结构和算法封装了,我为什么还要在这上花时间呢?”,持这种论调者有不少。对此我至少可以举出以下几点理由进行反驳:

1. 现在已经有计算器,那为什么还要学1+1呢?因为我们要学会数学的基本思想和方法。学习数据结构和算法并不仅仅要求我们学会如何使用和实现某种数据结构,更重要的是学会分析解决问题的思想和方法。

2.再先进的控件、再复杂的类库也需要人来写,必须懂得算法和数据结构才能写出这些类库和控件。

3.虽然说不知道内部细节,并不妨碍使用类库或控件,但是如果了解其中的细节,你会用得更加得心应手。更重要的是,当你手上的类库和控件无法满足你的实际需要时,你能够立刻写出一个来,而不需要花时间到处找,更何况即使花了时间也未必能找得到最适合自己的。

4.算法是解决问题的机械步骤。大多数情况下,人类解决问题的过程都是在实施某种算法,因此强人工智能主义者认为“人的思维能力也是一种算法”。且不论这种观点正确与否,但学习算法可以增强一个人的逻辑思维能力是毫无疑问的。

仅仅从“让自己变得更聪明”这一点,就有必要好好学习算法和数据结构。

5.还有一点,我认为最重要:算法和数据结构是程序编写中最具有创造性、最具挑战性的部分,也是最有趣的部分。倘若不学算法和数据结构,仅仅是学会使用开发工具进行机械地编码,编程还有什么乐趣可言?

数据结构与算法

本章知识要点 算法的基本概念 数据结构的定义 线性表的定义和存储 树 二叉树的定义和存储 查找与排序算法。算法 algorithm 是一组有穷的规则,规定了解决某一特定类型问题的一系列运算,是对解题方 与完整的描述。算法是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。在计算机科学中...

算法与数据结构

学院专业姓名学号。实验1 线性表的操作 12学时 问题描述 假设一个班级内有n个学生,定义一个学生类和一个班级类。学生类中包括学号 姓名 性别 年龄 专业等属性 班级类包括一个学生对象链表。定义如下 class student class myclass student stu head 链表表头指...

算法与数据结构

1 简述算法的概念及其五个重要特性。2 下图是用邻接表存储的图,请画出此图,写出其邻接矩阵以及从c点开始分别按广度优先搜索和深度优先搜索遍历该图的结果。给定一棵用二叉链表表示的二叉树,其根指针为root,编写求此二叉树叶结点个数的算法,要求先写出二叉链表的类型定义。2.编写简单选择排序的算法。1 用...