数据结构算法编程实现样例详解

发布 2019-08-16 06:05:55 阅读 2751

请仔细阅读,建议打印。注意比较细节的差异,关于指针问题请看 “难点答疑”。

难点答疑: 关于c/c++语言中的结构体与指针。

1. 结构体和指针的引入原因。

我们已经知道数组,它用来保存线性数据,但是它有许多缺点:

◇ 数组的大小是固定的,在程序运行期间是不能改变的。我们在定义数组时必须足够大,保证程序运行时不会溢出。但是,这也常常导致大量数组存储单元的浪费。

◇ 数组需要一块连续的内存空间。但当应用程序较大,数组需要的内存块也较大时,这可能会降低程序的效率。

◇ 如果在数组元素中,有较多的插入操作,则被插元素后的元素需要向后移位,这也浪费机器的运行时间。

链表也是表示线性数据最有用的方法之一,用链表保存线性数据,可以克服数组的问题。使用链表数据结构需要结构体和指针作为基础。

2. 结构体的特点。

在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。由于数组还必须要求元素为相同类型,显然不能用一个数组来存放这一组数据。

因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。

而结构数据类型(结构体)就可以解决这个问题。为了满足程序设计的需要,我们自己定义数据类型,称之为自定义数据类型,结构是自定义数据类型中的一种,它可将多种数据类型组合在一起使用。

3. 结构体的定义方法。

4. 结构体类型变量的引用。

结构体成员的引用方法: 结构变量名。成员名。

如 5. 结构体变量的初始化。

struct child cha=;

6. 结构体数组。

结构体类型的定义与前面的定义方法相同,只需把变量名定义成数组形式即可:如cha[2]

结构体数组初始化举例:

struct child cha[2]=,

7. 为什么要用指针。

指针的好处在于:只要知道数据的位置就可以访问任何大小的数据。

下图是一个简单的链表示意图:

该链表由3个结点组成,其中每个结点都分为两个域,一个是数据域(即图中的大写字母a、b、c),存放各种实际的数据,如学号num、姓名name、性别***和成绩score等。另一个域为指针域,存放下一结点的首地址。比如第一个结点的指针域存放的地址是1475,就是第二个结点的首地址。

链表中的每一个结点都是同一种结构类型。

8. 指针使用说明。

1)关于指针运算符

两个运算 * 和 & 的作用正好相反,指针间接访问运算符 * 的意思是“指针指向的对象”,而地址运算符&的意思是“得到地址”,*从地址中获得数据的内容,而&获得该数据的地址。

修改指针所指向的数据时要使用间接访问运算符 *,要修改指针所指向的地址时,只需修改指针本身。例如:(*p)++将指针所指向的数据增加1,而p++则是将指针指向了下一个地址。

2)关于指针的进一步介绍。

9.几种线性结构的算法实现总结(c语言实现)

顺序表的建立与操作算法。

单链表的建立与操作算法。

栈的建立与基本操作的算法。

队列的建立与基本操作算法。

算法与数据结构讲义三 搜索算法

搜索的方法 按行搜索 即从上到下,逐层搜索。双向按行搜索 一边从上往下 起始状态到中间状态 一边从下往上逐。层搜索 从目标状态到中间状态 找到相同的中间状态。即可。回朔法搜索 优先向更深层结点查找,走不通则换一条路,无法换则退回。到上一层。搜索状态的减少 在生成搜索树时,对于已搜过的中间状态的再次出...

数据结构实验一顺序表的实现

班级学号姓名分数 一 实验目的 1.熟悉线性表的基本运算在两种存储结构 顺序结构和链式结构 上的实现 2.以线性表的各种操作的实现为重点 3.通过本次学习帮助学生加深c语言的使用,掌握算法分析方法并对已经设计出的算法进行分析,给出相应的结果。二 实验要求 编写实验程序,上机运行本程序,保存程序的运行...

数据结构实验数组

crosslist ma int z 主函数 void main creatmatrix ma out m ma main 十字链表的输出 void out m crosslist m printf printf 打回车键,返回。ch getchar void creatmatrix crossli...