编程数据结构构算法问题,求大神解答用C语言编程

本节开始将带领大家系统地学习編程数据结构构作为一门计算机专业大二学生的必修课程,该课程面对的目标人群为初步具备基本编程能力和编程思想的程序员(大一接触了 C 语言或者 C++)通过系统地学习编程数据结构构,可以提高程序员分析问题和解决问题的能力


首先,先来揭开编程数据结构构的神秘面纱看看什么是编程数据结构构。

编程数据结构构可以将之分为“数据”和“结构”两个方面去理解。

数据很好理解。都说人离鈈开空气感觉剥夺实验告诉我们,人也离不开信息而信息实际上就是对数据进行加工后得到的产物。信息的形式多样化所以数据的形态也多种多样:文字、数字、字母、符号、图形图像、音频视频等都可以是数据。

感觉剥夺实验就是剥夺人的所有接受信息的权利,包括触觉、听觉、感觉等这样的剥夺,任何人都是受不了的详情可以去网上搜索。

2017 年的双 11全球的“剁手族”为天猫贡献了 1682 亿,其中“剁手族”分布最多的城市为广东等等这些都是通过天猫后台对一笔笔交易数据进行统计得出的结论。

结构可以理解为各部分之间的關系。对于一篇文章的文章结构来说有总分式,有并列式等而判断一篇文件结构的过程实际上就是搞清楚文章中各个自然段落之间的關系。

编程数据结构构实际上是一门研究数据以及数据之间存在的关系的一门课程。通过理清数据及其之间存在的关系就可以将数据囿效存储到计算机中,让计算机来处理数据

例如,在编写程序实现计算 7-2= 的问题中,首先搞清楚的是:

  1. 问题中只涉及到两个数据:整数 7 囷整数 2;
  2. 数据之间的关系是被减数与减数的关系;


全部搞清楚了之后就可以编写程序解决此问题:定义两个整形变量,一个表示被减数一个表示减数(确定之间的关系),将 7 和 2 赋给各自相应的变量(将数据存储到计算机中)最终输出相减的结果。

编程数据结构构的体現不止于此如图 1 所示,为一个家庭现有成员的树形图现需要让计算机解决:找到孙子张磊的爷爷是谁?


图 1 家庭成员树形图


通过看这张镓谱树形图可以一眼看出,张磊的爷爷是张亮但是如果把这个问题交给计算机来实现,就需要帮助计算机理清数据之间的关系

数据嘚逻辑结构和物理结构

数据之间的关系(即编程数据结构构)又可细分为:逻辑关系(逻辑结构)和物理关系(物理结构)。逻辑关系就昰例如张晶的父亲是张平、张群是张平的兄弟等等这样的关系是人为赋予给数据的。

数据之间的逻辑关系分为三种:“一对一”、“一對多”、“多对多”图 1 中,每个孩子对应着唯一的父亲这是“一对一”的关系;拿张平来说,他有两个孩子为“一对多”的关系;茬共享单车中,每个用户都可以选择多辆不同的单车;而每辆单车会被多个人使用此为“多对多”的关系。

但是由于最终解决问题的主體是计算机解决问题时需要将数据全部存储到计算机中,而后计算机去处理数据在计算机中的实际存储表现出的是数据之间的物理结構,例如张晶距离张磊在实际的物理存储中有 5 比特的距离

学习编程数据结构构的作用就是在理清数据的逻辑关系的前提下,设计出合理嘚物理存储结构使用这种结构,既能有效的存储数据又能表示数据之间的关系。当计算机明白了这两个因素问题自然而然就解决了。

编程数据结构构和算法两者为互利共赢的关系两者并不冲突。使用计算机编程解决某个具体问题时正确的做法是:

  1. 思考如何将要用箌的数据存储到计算机中;
  2. 使用什么方法解决这个问题;


编程数据结构构解决的是第一个问题,算法解决的的第二个问题光有编程数据結构构没有算法,相当于只把数据存储到计算机中而没有有效的方法去处理没有任何意义;而若光有算法,没有编程数据结构构就相當于一个军师有锦囊妙计,但是没有士兵

本教程参照严蔚敏教授的《编程数据结构构》一书,课程内容同该书同步根据数据之间不同嘚逻辑关系,分为以下章节:

  • 线性表、栈和队列:解决的是具有“一对一”关系的数据的存储问题;
  • 树:解决的是具有“一对多”(也可以包含“一对一”)关系的数据存储问题;
  • 图:解决的是具有“多对多”(也包含“一对一”和“一对多”)关系的数据存储问题;


以上在介绍的同时还会涉及到具体问题的解决,例如查找某个数据等除以上内容外,也包含了有关字符串、数组和广义表的相关内容

除以仩内容外,本教程对于各个知识点还会配有专门的项目进行练习,同时还会不断地更新内容给大家搜集介绍一些实用的算法。


编程数據结构构解决的是数据的有效存储问题而不涉及到具体编程语言,是编程的基础课程

误区:随着计算机技术日新月异的发展,越多的技术涌现很多人花大精力和时间去追求新技术新热点,而将编程数据结构构等基础抛之脑后实属南辕北辙。因为软件开发不论如何改變其最核心的底层知识不会改变。学习编程数据结构构等一些基础课程才能真正的做到以不变应万变


对于面临的一些复杂的问题,其複杂性往往不是解决该问题的算法更多的是思考如何存储具有复杂关系的数据。对于解决此类问题编程数据结构构无疑是一把利器。

編程数据结构构中还会涉及有一些具体问题的解决算法(本教程会持续更新)例如没有接触编程数据结构构之前,对于数据的排序可能只想到冒泡(冒泡排序),其实你不知道还有插入排序,快速排序等效率更高的排序算法这些在本教程中都会以图文并茂的方式给夶家讲解。

本教程 PK 其他编程数据结构构教程

本教程依照于严蔚敏的《编程数据结构构》一书致力于打造一套适用与初学者,最浅显易懂嘚编程数据结构构教程

由于《编程数据结构构》一书在对知识点的讲解上,跳跃性较强对读者的编程思维要求较高。针对这个情况夲教程在该书的基础上对其知识点进行了更浅显易懂的讲解,在讲解过程中配有大量的样例和图示

更重要的是,本教程对该书中所有的偽代码进行了基于 C 语言的完整实现对实现过程进行了大量的铺垫,并附带了大量易于理解的注释和图示

注意:本书中所有涉及到的代碼都是基于 C 语言实现的,且遵循较新的 C99 标准读者在尝试运行网站中的代码时请尽量使用较新版本的编译器。

在武侠小说中高手往往注偅内功的修养,而招式则为其次有了深厚的内力,即使不会招式也能见招拆招;如果一味地崇拜花拳绣腿,没有内功只是花架子,沒什么卵用

程序猿的路也是如此,要内外兼修很多人认为大学所学的内容没用,其实不然大学的学习就是在不断地提升自己的内功修为;毕业步入社会后,在深厚内力的基础上学习招式

编程数据结构构作为计算机专业的必修课程,就像“北冥神功”“易筋经”一样是提升内功修为的绝世功法,怎么可以不学

当你选择了本教程,你已然超越了 99% 的程序员

}

写代码|下厨房|听音乐|爱喝茶

你好作为编码10几年程序员,近20年前接触C,C++语言结合自身经历,针对你的问题谈下我的看法。

问题一:通过看《c primer plus》自学C语言一个学期了

  • 首先峩想了解学习一个学期了,有没有学习的同时上机呢哪怕是简单的2个数的求和,100以内的求和甚至是printf("Hello World\n")等,如果没有上机写代码或者写嘚非常少抱歉!我觉得您缺少大量的上机实践,需要补上一般来说,一节理论课需要3到5节上机课写代码况且您是自学的,更需要多嘚上机实践科班出身的童鞋都需要大量上机,否则学精C语言很难

问题二:看到第十一章字符串发现书后习题几乎没有思路

  • 其实这个问題的根源,个人觉得有2个一个是基础知识的不扎实,譬如字符串如何在内存存储的如何遍历字符串等等,另一个原因还是缺少上机

問题三:要同时学编程数据结构构和算法吗

  • 个人觉得,可以尝试先学一些简单的编程数据结构构譬如:栈、队列等,等后期有一定上机儲备后可以在学习理论知识的同时,尝试自己写代码实现二叉树、图等相关编程数据结构构的普通操作譬如:创建、遍历等。

顺便提┅下C语言基础知识

  • 主要包括但不限于:数据类型(int、float、double、char、结构体、共用体、枚举)等、变量的声明与定义、函数声明与定义、数组的定义與使用、static使用、extern使用、指针定义与使用、指针的指针(双指针)、链表各种操作(创建、节点插入、节点删除、遍历链表)、文件的操作(打开、读、写、关闭)等

更多关于C语言学习方面的内容,可参考我的其他文章

}

我要回帖

更多关于 编程数据结构 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信