《数据结构》c语言版
数据结构(C语言版)

数据结构(C语言版)数据结构(C语言版)1.概述数据结构是计算机科学中研究数据组织、存储、管理和操作的一门学科。
本文档将介绍各种常见的数据结构及其在C语言中的实现。
2.数组数组是一种线性数据结构,它由一组连续的内存单元组成,用于存储相同类型的元素。
C语言中的数组可以通过下标来访问和操作。
2.1 一维数组一维数组是最简单的数组形式,它由一组按照顺序排列的元素组成。
通过下标可以方便地访问和修改数组中的元素。
2.2 二维数组二维数组可以看作是一维数组的扩展,它由行和列组成。
通过两个下标可以定位到数组中的某个元素。
3.链表链表是一种动态数据结构,它由一系列结点组成,每个结点包含数据和一个指向下一个结点的指针。
链表的插入、删除操作比较高效,但访问效率较低。
3.1 单链表单链表是最基本的链表形式,它的每个结点只包含一个指向下一个结点的指针。
3.2 双链表双链表在单链表的基础上,每个结点还包含指向前一个结点的指针,这样可以方便地进行双向遍历和删除操作。
4.栈与队列栈和队列是两种常见的线性数据结构,它们都具有特定的进出规则。
4.1 栈栈是一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。
4.2 队列队列是一种先进先出(FIFO)的数据结构,只能在队尾插入元素,在队头删除元素。
树是一种非线性数据结构,它由一组有层次关系的结点组成。
5.1 二叉树二叉树是一种特殊的树形结构,每个结点最多拥有两个子结点。
5.2 二叉查找树二叉查找树是一种特殊的二叉树,左子树的值都小于根结点的值,右子树的值都大于根结点的值。
6.图图是一种非线性的数据结构,它由一组顶点和边组成。
6.1 有向图有向图中的边具有方向,表示从一个顶点到另一个顶点的有向路径。
6.2 无向图无向图中的边没有方向,表示两个顶点之间的无序关系。
附件:本文档未涉及附件。
法律名词及注释:。
《数据结构》(C语言版) 第一章 绪论 习题及答案

一、单选题1、______ 是数据的最小单位。
A、数据项B、表元素C、信息项D、数据元素2、以下说法不正确的是______。
A、数据可由若干个数据元素构成B、数据项可由若干个数据元素构成C、数据项是不可分割的最小标识单位D、数据元素是数据的基本单位3、数据结构是指 ______ 的集合以及它们之间的关系。
A、数据B、结构C、数据元素D、计算方法4、计算机所处理的数据一般具备某种内在联系,这是指 ______。
A、数据和数据之间存在某种关系B、元素和元素之间存在某种关系C、元素内部具有某种结构D、数据项和数据项之间存在某种关系5、在数据结构中,与所使用的计算机无关的是数据的 ______ 结构。
A、逻辑B、存储C、逻辑和存储D、物理6、数据的逻辑结构可以分为 ______ 两类。
A、紧凑结构和非紧凑结构B、动态结构和静态结构C、线性结构和非线性结构D、内部结构和外部结构7、数据的逻辑结构是指 ______ 关系的整体。
A、数据项之间逻辑B、数据元素之间逻辑C、数据类型之间D、存储结构之间8、以下是数据结构中 ______ 属非线性结构。
A、串B、栈C、队列D、平衡二叉树9、以下属于逻辑结构是 ______。
A、双链表B、单链表C、顺序表D、有序表10、以下不属于存储结构是______。
A、顺序表B、线性表C、邻接表D、单链表11、在计算机中存储数据时,通常不仅要存储各数据元素的值,而且还有存储 ______。
A、数据元素之间的关系B、数据元素的类型C、数据的处理方法D、数据的存储方法12、数据结构在计算机内存中的表示是指 ______。
A、数据的逻辑结构B、数据结构C、数据元素之间的关系D、数据的存储结构13、在数据的存储中,一个节点通常存储一个 ______。
A、数据结构B、数据元素C、数据项D、数据类型14、在决定选取任何类型的存储结构时,一般不多考虑 ______。
A、各节点的值如何B、节点个数的多少C、对数据有哪些运算D、所用编程语言实现这种结构是否方便15、数据在计算机的存储器中表示时,逻辑上相邻的两个元素对应的物理地址也是相邻的,这种存储结构称之为 ______。
数据结构(C语言版)

比较
Prim算法适用于稠密图, Kruskal算法适用于稀疏图;
两者时间复杂度相近,但 Kruskal算法需额外处理并查
集数据结构。
最短路径算法设计思想及实现方法比较
1 2
Dijkstra算法
从源点出发,每次找到距离源点最近的顶点并更 新距离值,直至所有顶点距离确定。适用于不含 负权边的图。
Floyd算法
特殊二叉树
满二叉树、完全二叉树等。
二叉树的遍历与线索化
二叉树的遍历
前序遍历、中序遍历、后序遍历和层 次遍历是二叉树的四种基本遍历方法 。
线索化二叉树
为了方便查找二叉树节点的前驱和后 继,可以对二叉树进行线索化处理, 即在节点的空指针域中存放指向前驱 或后继的指针。
树和森林的遍历与转换
树的遍历
01
串的顺序存储结构
01
02
03
串的顺序存储结构是用 一组地址连续的存储单 元来存储串中的字符序
列的。
按照预定义的大小,为 每个定义的串变量分配 一个固定长度的存储区 ,一般是用定长数组来
定义。
串值的存储:将实际串 长度值保存在数组的0下 标位置,串的字符序列 依次存放在从1开始的数
组元素中。
串的链式存储结构
03
比较
DFS空间复杂度较低,适用于递 归实现;BFS可找到最短路径, 适用于非递归实现。
最小生成树算法设计思想及实现方法比较
Prim算法
从某一顶点开始,每次选择当 前生成树与外界最近的边加入 生成树中,直至所有顶点加入
。
Kruskal算法
按边权值从小到大排序,依次 选择边加入生成树中,保证不
形成环路。
数据结构(C语言版)
数据结构(c语言版)课后习题答案完整版

数据结构(c语言版)课后习题答案完整版数据结构(C语言版)课后习题答案完整版一、数据结构概述数据结构是计算机科学中一个重要的概念,用来组织和存储数据,使之可以高效地访问和操作。
在C语言中,我们可以使用不同的数据结构来解决各种问题。
本文将提供完整版本的C语言数据结构的课后习题答案。
二、顺序表1. 顺序表的定义和基本操作顺序表是一种线性表,其中的元素在物理内存中连续地存储。
在C 语言中,我们可以通过定义结构体和使用指针来实现顺序表。
以下是顺序表的一些基本操作的答案:(1)初始化顺序表```ctypedef struct{int data[MAX_SIZE];int length;} SeqList;void InitList(SeqList *L){L->length = 0;}```(2)插入元素到顺序表中```cbool Insert(SeqList *L, int pos, int elem){if(L->length == MAX_SIZE){return false; // 顺序表已满}if(pos < 1 || pos > L->length + 1){return false; // 位置不合法}for(int i = L->length; i >= pos; i--){L->data[i] = L->data[i-1]; // 向后移动元素 }L->data[pos-1] = elem;L->length++;return true;}```(3)删除顺序表中的元素```cbool Delete(SeqList *L, int pos){if(pos < 1 || pos > L->length){return false; // 位置不合法}for(int i = pos; i < L->length; i++){L->data[i-1] = L->data[i]; // 向前移动元素 }L->length--;return true;}```(4)查找顺序表中的元素```cint Search(SeqList L, int elem){for(int i = 0; i < L.length; i++){if(L.data[i] == elem){return i + 1; // 找到元素,返回位置 }}return -1; // 未找到元素}```2. 顺序表习题解答(1)逆置顺序表```cvoid Reverse(SeqList *L){for(int i = 0; i < L->length / 2; i++){int temp = L->data[i];L->data[i] = L->data[L->length - 1 - i]; L->data[L->length - 1 - i] = temp;}}```(2)顺序表元素去重```cvoid RemoveDuplicates(SeqList *L){for(int i = 0; i < L->length; i++){for(int j = i + 1; j < L->length; j++){if(L->data[i] == L->data[j]){Delete(L, j + 1);j--;}}}}```三、链表1. 单链表单链表是一种常见的链式存储结构,每个节点包含数据和指向下一个节点的指针。
数据结构c语言版试题及答案

数据结构c语言版试题及答案一、选择题(每题2分,共10分)1. 在C语言中,以下哪个关键字用于定义结构体?A. structB. unionC. enumD. typedef答案:A2. 若有一个结构体数组,下列哪个函数可以用来初始化数组中的每个元素?A. memsetB. memcpyC. strcpyD. bzero答案:A3. 在C语言中,以下哪个函数用于动态分配内存?A. mallocB. callocC. reallocD. all of the above答案:D4. 对于一个链表,以下哪个操作是正确的?A. 插入节点B. 删除节点C. 遍历链表D. all of the above答案:D5. 在C语言中,以下哪个函数用于释放动态分配的内存?A. freeB. mallocC. callocD. realloc答案:A二、填空题(每题3分,共15分)1. 结构体定义的关键字是______。
答案:struct2. 在C语言中,动态分配内存失败时,malloc函数返回______。
答案:NULL3. 单链表的头节点指针通常初始化为______。
答案:NULL4. 双向链表中,每个节点包含______个指针。
答案:两个5. 树的深度优先遍历包括______、中序遍历和后序遍历。
答案:前序遍历三、简答题(每题5分,共20分)1. 请简述C语言中结构体和联合体的区别。
答案:结构体(struct)可以包含不同类型的数据,并且可以有多个实例;联合体(union)可以包含不同类型的数据,但是只能有一个实例,即在任意时刻只能存储其中一个成员的值。
2. 动态内存分配的优点是什么?答案:动态内存分配允许程序在运行时根据需要分配内存,这样可以更有效地使用内存资源,并且可以创建大小不固定的数据结构。
3. 链表相比于数组有哪些优点?答案:链表的优点包括动态大小,可以灵活地插入和删除节点,不需要预先知道数据的大小。
数据结构c语言版耿国华课后习题答案

数据结构c语言版耿国华课后习题答案数据结构是计算机科学中非常重要的一门课程,它涉及到了计算机程序设计中的数据组织、存储和操作等方面。
而耿国华教授的《数据结构c语言版》是这门课程中的经典教材之一,它通过讲解各种数据结构的原理和实现方法,帮助学生更好地理解和掌握这门课程的知识。
本文将针对《数据结构c语言版》中的一些典型习题进行解答,帮助读者更好地理解和掌握这些知识点。
1. 线性表线性表是数据结构中最基本的一种数据结构,它包含了顺序表和链表两种实现方式。
在习题中,我们需要实现线性表的基本操作,如插入、删除、查找等。
通过编写代码,我们可以更好地理解这些操作的实现原理和思路。
2. 栈和队列栈和队列是线性表的特殊形式,它们分别具有“先进后出”和“先进先出”的特点。
在习题中,我们需要实现栈和队列的基本操作,如入栈、出栈、入队、出队等。
通过编写代码,我们可以更好地理解这些操作的实现方法和应用场景。
3. 树和二叉树树是一种非线性的数据结构,它具有层次关系。
二叉树是树的一种特殊形式,它每个节点最多只有两个子节点。
在习题中,我们需要实现树和二叉树的基本操作,如创建、插入、删除、遍历等。
通过编写代码,我们可以更好地理解这些操作的实现原理和应用场景。
4. 图图是一种非线性的数据结构,它由节点和边组成。
在习题中,我们需要实现图的基本操作,如创建、插入、删除、遍历等。
通过编写代码,我们可以更好地理解这些操作的实现方法和应用场景。
5. 查找和排序查找和排序是数据结构中非常重要的一部分,它们在实际应用中具有广泛的应用。
在习题中,我们需要实现各种查找和排序算法,如顺序查找、二分查找、冒泡排序、快速排序等。
通过编写代码,我们可以更好地理解这些算法的实现原理和性能特点。
通过以上习题的解答,我们可以更好地理解和掌握《数据结构c语言版》中的知识点。
同时,通过编写代码,我们可以锻炼自己的编程能力和解决问题的能力。
希望读者能够通过习题的解答,更好地理解和应用数据结构这门课程的知识。
李春葆编著数据结构(C语言篇)习题与解析(修订版)

一、绪论选择题1.数据结构是一门研究非数值计算的程序设计问题中计算机的1以及它们之间的2和运算等的学科。
1 A.数据元素 B.计算方法 C.逻辑存储 D.数据映像2 A.结构 B.关系 C.运算 D.算法2.数据结构被形式地定义为(K, R),其中K是1的有限集,R是K上的2有限集。
1 A.算法 B.数据元素 C.数据操作 D.逻辑结构2 A.操作 B.映像 C.存储 D.关系3.在数据结构中,从逻辑上可以把数据结构分成。
A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构4.线性结构的顺序存储结构是一种1的存储结构,线性表的链式存储结构是一种2的存储结构。
A.随机存取B.顺序存取C.索引存取D.散列存取5.算法分析的目的是1,算法分析的两个主要方面是2。
1 A.找出数据结构的合理性 B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性2 A.空间复杂度和时间复杂度 B.正确性和简单性C.可读性和文档性D.数据复杂性和程序复杂性6.计算机算法指的是1,它必须具备输入、输出和2等5个特性。
1 A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法2 A.可执行性、可移植性和可扩充性 B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性7.线性表的逻辑顺序与存储顺序总是一致的,这种说法。
A.正确B.不正确8线性表若采用链式存储结构时,要求内存中可用存储单元的地址。
A.必须连续的B.部分地址必须连续的C.一定是不续的D连续不连续都可以9.以下的叙述中,正确的是。
A.线性表的存储结构优于链式存储结构B.二维数组是其数据元素为线性表的线性表C.栈的操作方式是先进先出D.队列的操作方式是先进后出10.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。
A.正确B.不正确填空题1.数据逻辑结构包括三种类型、和,树形结构和图形结构合称为。
数据结构c语言版读后感

数据结构c语言版读后感《数据结构(C语言版)读后感》读完《数据结构(C语言版)》这本书,真的是感慨万千。
读到数组这部分的时候,我感觉就像是打开了一扇通往有序数据存储世界的大门。
例如,在处理学生成绩的场景中,我们可以用数组很方便地存储每个学生的各科成绩。
这时候C语言里面数组的索引就像是每个学生对应的学号一样,能够准确地定位到每一个数据。
但是,当涉及到多维数组的时候,我一开始有点迷糊,像二维数组表示图像像素的时候,那个行列的索引关系总是搞混。
后来我明白了,其实可以把二维数组想象成一个棋盘,行就是每一行的棋子,列就是这一行中的某个棋子的位置,这样理解起来就方便多了。
特别触动我的是链表这一章节。
链表这种数据结构和数组相比非常灵活。
它就像一群手拉手的小伙伴,可以随时断开某两个人的手,再牵上别人的手组成不同的序列。
我想到在构建一个动态的人员信息系统时,员工信息可能随时增加或者删除,用链表结构就可以轻松应对这种变化,而不需要像数组一样预先设定好大的存储空间,避免了空间的浪费。
栈和队列这部分也很有趣。
栈是一种后进先出的数据结构,这让我想起了装子弹的弹匣,最后装进去的子弹最先被打出来。
而队列则相反,是先进先出的,就像排队买东西,先来的人先得到服务。
在编程中遇到解析表达式或者任务调度之类的问题时,这两种数据结构都能派上大用场。
树结构也让我印象深刻。
书中从二叉树再到平衡二叉树和哈夫曼树的介绍,让我看到了同一类型数据结构的不同优化方向。
将树结构用于文件系统的存储结构理解上是一件有意思的事情。
比如说一个目录就像是树的节点,它下面的子目录或者文件就是这个节点延伸出去的分支或者树叶。
最后关于图结构,它描述了很多事物之间复杂的关系。
就像社交网络中的人际关系一样,每个人是一个节点,人与人之间的关系就是图的边。
虽然图的一些算法例如最短路径算法有些复杂,但理解了之后会发现它在很多领域都能找到应用场景,像物流的配送路线优化等。
总的来说,这本书给我的数据结构知识构建起了一个坚实的框架,虽然在阅读过程中有不少磕磕绊绊,但收获真的超值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》第五版清华大学自动化系李宛洲2004年5月目录第一章数据结构--概念与基本类型 (6)1.1概述 (6)1.1.1数据结构应用对象 (6)1.1.2学习数据结构的基础 (7)1.1.2.1 C语言中的结构体 (7)1.1.2.2 C语言的指针在数据结构中的关联作用 (8)1.1.2.3 C语言的共用体(union)数据类型 (12)1.1.3数据结构定义 (15)1.2线性表 (17)1.2.1 顺序表 (18)1.2.2 链表 (20)1.2.2.1链表的基本结构及概念 (20)1.2.2.2单链表设计 (22)1.2.2.3单链表操作效率 (29)1.2.2.4双链表设计 (30)1.2.2.5链表深入学习 (32)1.2.2.6稀疏矩阵的三元组与十字链表 (36)1.2.3 堆栈 (41)1.2.3.1堆栈结构 (41)1.2.3.2基本操作 (42)1.2.3.3堆栈与递归 (44)1.2.3.4递归与分治算法 (45)1.2.3.5递归与递推 (49)1.2.3.6栈应用 (52)1.2.4 队列 (57)1.2.4.1队列结构 (57)1.2.3.2队列应用 (59)1.3非线性数据结构--树 (64)1.3.1 概念与术语 (64)1.3.1.1引入非线性数据结构的目的 (64)1.3.1.2树的定义与术语 (65)1.3.1.3树的内部节点与叶子节点存储结构问题 (66)1.3.2 二叉树 (66)1.3.2.1二叉树基本概念 (66)1.3.2.2完全二叉树的顺序存储结构 (68)1.3.2.3二叉树遍历 (69)1.3.2.4二叉树唯一性问题 (71)1.3.3 二叉排序树 (72)1.3.3.1基本概念 (72)1.3.3.2程序设计 (73)1.3.4 穿线二叉树 (79)1.3.4.1二叉树的中序线索化 (80)1.3.4.2中序遍历线索化的二叉树 (81)1.3.5 堆 (82)1.3.5.1建堆过程 (83)1.3.5.2在堆中插入节点 (85)1.3.6 哈夫曼树 (86)1.3.6.1最佳检索树 (86)1.3.6.2哈夫曼树结构与算法 (88)1.3.6.3 哈夫曼树应用 (90)1.3.6.4哈夫曼树程序设计 (92)1.3.7 空间数据结构----二叉树深入学习导读 (95)1.3.7.1k-d树概念 (96)1.3.7.2k-d树程序设计初步 (97)1.4非线性数据结构--图 (100)1.4.1图的基本概念 (100)1.4.2图形结构的物理存储方式 (103)1.4.2.1相邻矩阵 (103)1.4.2.2图的邻接表示 (104)1.4.2.3图的多重邻接表示 (106)1.4.3图形结构的遍历 (107)1.4.4无向连通图的最小生成树(minimum-cost spanning tree:MST) (110)1.4.5有向图的最短路径 (113)1.4.5.1单源最短路径(single-source shortest paths) (113)1.4.5.2每对顶点间最短路经(all-pairs shortest paths) (116)1.4.6拓扑排序 (117)第二章检索 (123)2.1顺序检索 (123)2.2对半检索 (124)2.2.1 对半检索与二叉平衡树 (124)2.2.2对半检索思想在链式存储结构中的应用---跳跃表 (127)2.3分块检索 (133)2.4哈希检索 (134)2.4.1哈希函数 (135)2.4.2闭地址散列 (136)2.4.2.1线性探测法和基本聚集问题 (136)2.4.2.2删除操作造成检索链的中断问题 (138)2.4.2.3随机探测法 (139)2.4.2.4平方探测法 (140)2.4.2.5二次聚集问题与双散列探测方法 (141)2.4.3开地址散列 (142)2.4.4哈希表检索效率 (142)第三章排序 (145)3.1交换排序方法 (145)3.1.1直接插入排序 (145)3.1.2冒泡排序 (147)3.1.3 选择排序 (148)3.1.4 树型选择排序 (149)3.2S HELL排序 (150)3.3快速排序 (152)3.4堆排序 (154)3.5归并排序 (156)3.6数据结构小结 (159)3.6.1 数据结构的基本概念 (159)3.6.2 数据结构分类 (159)3.6.2.1数据结构中的指针问题 (160)3.6.2.2线性表的效率问题 (161)3.6.2.3二叉树 (161)3.6.3排序与检索 (161)3.7算法分析的基本概念 (162)3.7.1基本概念 (162)3.7.2上限分析 (164)3.7.3下限分析 (164)3.7.4空间代价与时间代价转换 (165)第6章高级数据结构内容--索引技术 (167)6.1基本概念 (167)6.2线性索引 (168)6.2.1 线性索引 (168)6.2.2 倒排表 (169)6.32-3树 (170)6.3.1 2-3树定义 (172)6.3.2 2-3树节点插入 (173)6.4B+树 (178)6.4.1 B+树定义 (178)6.4.2 B+树插入与删除 (180)6.4.3 B+树实验设计 (182)第一章数据结构--概念与基本类型1.1概述1.1.1数据结构应用对象计算机应用可以分为两大类,一类是科学计算和工业控制,另一类是商业数据处理。
相应的计算机语言也是如此,比如FORTRAN语言、C、汇编语言主要适应于前者,比如JAVA、Powerbuilder(关系数据库平台开发工具)、Visual C等主要适应于后者。
面向工业控制与科学计算的内容主要涉及它的计算方法、效率与速度等因素,某一特定的测控对象有特定的算法,在这里我们主要侧重于解决问题的方法研究,比如高次方程的叠代算法,快速富氏变换的蝶型算法等。
面向商业管理是要解决海量数据的管理与关联分析,即使是一个特定的对象也有通用的数据管理形式,比如商业数据库系统,无论何种具体应用,它都是大量的表格一类的数据处理形式,在海量数据中检索与查询是一类至关重要的操作工具,于是,数据的逻辑结构与物理组织形式是我们要解决的主要问题,比如表数据的存储形式,索引结构等,也就是数据结构问题。
什么是数据结构?数据结构的研究对象是数据元素,目的是建立数据元素在计算机中的表达方法,简单的说,在一群有限的数据元素集合里,元素与元素之间相互关系的描述,称为它的数据结构。
比如,例1.1描述了有限个数据元素集合的字典的数据结构关系。
例1.1 字典的数据结构D={(able,能干的),(apple,苹果), (bug,虫), (code,代码), (cool,酷),…, (x-ray,X 光),(year,年),(zoo,动物园)}这里,单词是数据元素检索关键字,单词与注释构成数据元素(节点),元素节点之间所表达的关系是按字母的顺序排列,这就是我们给字典这一特定对象选定的数据结构。
另一个例子1.2描述了事务处理中经常见到表格的数据结构形式。
例1.2 线性表数据结构表1.1 设备统计清单理的形式,或者说选择表在计算机中的数据结构形式,需要采取如下步骤:首先,水平方向看表的每一行是一条记录,我们称之为向量a i,a i=(序号,设备名称,型号,单价,数量),a i的各分量是设备这一客观实体的属性,属性的取值就是实体记录,所以,从纵向看,表是成由一组记录所组成的,记录是表的数据结构元素,定义如下:struct BILL{char Facility[20];char Type[10];int Cost;int Number;};表结构表达的记录(节点元素)之间的关系是<a i,a i+1>,所以我们称表结构是线性的,可以用C语言的数组变量定义相应的数据关系为:struct BILL a[4];同所有的数组变量一样,结构数组的下标也是从0开始的。
因此,在计算机中可以用BILL结构变量型数组A[]来描述表1.1所表达的关系,也就是线性表的数据结构形式:a0=(1,车床,A64,5500,5)a1=(2,台钻,C7,3200,29)a2=(3,铣床,X-2,4000,14)a3=(4,铣,X-34,6700,1)1.1.2学习数据结构的基础数据结构建立在计算机语言之上。
学习计算机语言是学习编程方法,我们应该如何用一种具体的计算机语言实现一个算法。
学习数据结构,是学习如何描述一个应用对象的数据元素(属性构成),如何根据应用对象的特点构造数据元素之间的逻辑关系以及内存中的存储实现,这是二者的区别。
设计数据结构的时候要有相应的计算机语言工具支持,在BASIC、FORTRAN、C语言中,只有C是面向数据结构应用的工具语言。
比较一下C和其它语言的区别就可以知道原因,因为它有定义数据结构基本单元的能力,并有地址的运算能力,这两点是非常重要的。
通过定义数据结构的基本单元,我们可以把不同数据类型的变量聚集在一个节点内;通过地址运算,我们可以把数据结构的逻辑关系在计算机内存中用不同存储方式实现。
在C语言中定义数据结构元素是通过结构体实现的。
1.1.2.1 C语言中的结构体在学习C语言的时候,同学对数组很熟悉,比如一个整型量的数组定义如下:int array[100];它表达了一组整型量的集合,在C语言中基本变量的类型有整型量,浮点变量,字符变量等,将所有基本变量聚合在一起的方法是定义结构体,用结构体作为基本元素描述事物的属性信息,比如表1.1那样,我们称之为数据结构元素,或者节点。
关于数据结构元素在C语言中给出了明确定义:结构元素是一种被命名为一个标识符的各种变量的集合,是提供将各种基本数据类型汇集到一块的手段,它提供了结构变量的格式。
比如一个电话簿的结构元素如下定义:struct ADDER{char Name[20];char Street[40];char City[20];char STATE[2];unisgned l ong Zip;};通过结构体定义,ADDER结构变量代表了一组基本数据类型的聚合结构,它就是所谓数据结构的基本单元,我们定义,数据结构就是描述这样一组结构变量之间关系的形式,例如:struct ADDER adder_info[100];给出了结构变量ADDER的数组结合形式,是一种线性关系数据结构。
1.1.2.2 C语言的指针在数据结构中的关联作用结构化的程序模块和指针的应用是C语言程序设计的基本风格,随着BC和VC的出现,面向对象的程序设计方法以及多线程技术给我们提供了在Windows平台上开发应用软件的多样化风格,但是,指针的应用依然是我们程序设计最基本的特征。