数据结构(C语言严版)总结

数据(data):在计算机中表示所有能输入计算机并被计算机程序处理的符号的总称。

数据元素(data element):是数据的基本单位,通常被计算机作为一个整体进行处理和考虑。

数据项(data item):数据项是数据的不可分割的最小单位。通常,一个数据元素由若干数据项组成。举例,若书的书目信息为一个数据元素,那么书目信息中的每一项(如书名,书的作者名等)都可作为一个数据项。

数据对象(data object):是相同性质数据元素的集合,是数据的一个子集。

所以在同一度量的情况下,上述概念有如下包含关系:数据项  <  数据元素  <  数据对象  <  数据。

 

 

结构(structure):数据元素互相之间的关系成为结构。通常有下列四种基本结构:

(1)集合  结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系。

(2)线性结构  结构中的数据元素之间存在一对一的关系。线性表

(3)树形结构  结构中的数据元素之间存在一对多的关系。树

(4)图状结构/网状结构  结构中的数据元素之间存在多对多的关系。

数据结构(data structure,ds,之前非科班的我还没注意过大佬们说ds大题的时候,ds就是指数据结构):

互相之间存在一种或多种特定关系的数据元素的集合。数据结构是一个二元组(D,S),其中D是数据元素的有限集,SD上关系的有限集。

逻辑结构:结构定义中的“关系”描述的数据元素之间的逻辑关系,因此又称为数据的逻辑结构。简单理解,上面定义的结构即为数据的逻辑结构。

物理结构/存储结构:数据结构在计算机中的表示(又称映象),称为数据的物理结构,或者称为存储结构。

 

数据元素之间的关系在计算机中有两种不同的表示方法:顺序映射和非顺序映射,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。

 

数据类型(data type):一个值的集合和定义在这个值集上的一组操作的总称。

原子类型:原子类型的值是不可分解的,例如C语言中的基本类型(整型,实性等)

结构类型:结构类型的值是由若干成分按某种结构组成的,因此是可分解的,它的成分可以是非结构的,也可以是结构的。

抽象数据类型(Abstract Data Type):指一个数学模型以及定义在该模型上的一组操作。抽象数据类型可用以下三元组表示(D,S,P),其中D表示数据,S表示D上的关系集,P表示对D的基本操作。

 

算法(algorithm):是对特定问题求解步骤的一种描述,是指令的有限序列,其中,每一条指令表示一个或多个操作。

算法具有的五个重要特性:

(1)有穷性。有限步骤,有限时间内完成。

(2)确定性。对相同的输入只能得到相同的输出。

(3)可行性。能够通过已经实现的基本运算执行有限次来现实。

(4)输入。0个或多个

(5)输出。1个或多个

 

好的算法应该达到的目标:

(1)正确性(correctness)

(2)可读性(readability)

(3)健壮性(robustness)

(4)效率与低存储量的需求

 

 

算法效率的度量

频度(frequency count):语句的频度是指该语句重复执行的次数。

时间复杂度(渐进时间复杂度 / asymptotic time complexity):

算法中基本操作(固有数据类型的操作)重复执行的次数是问题规模n的某个函数f(n),

算法的时间度量(时间复杂度)记作T(n) = O(f(n))。即,存在某个实数C,使得有0<= T(n) <= Cf(n)。

 

空间复杂度(space complexity):

算法所需存储空间的度量。记为S(n)=O(f(n))。

 

线性结构:有唯一的“第一个”元素以及“最后一个”元素,且除第一个元素外,每个元素只有一个前驱,除最后一个元素外,每个元素只有一个后继。

线性表(linear_list)一个线性表是n个数据元素的有限序列。

栈(stack)限定仅在表尾进行插入或者删除操作(后进先出   /   last in first out   /   LIFO)的线性表。表头-栈顶,表尾-栈底。

队列(queue)一种先进先出(first in first out,缩写为FIFO)的线性表。允许插入的一端叫做队尾(rear),允许删除的一端称为对头(front)。

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构》(C语言) 算法源码及运行演示系统使用说明 一、启动演示系统 双击演示系统应用程序文件“DS_VC_ALGO.EXE”启动演示系统,出现图1所示界面。 图1 《数据结构》(C语言)算法源码及运行演示系统主界面 二、演示系统使用步骤 除了个别算法之外,演示系统给出了《数据结构》(C语言)书中算法对应的程序代码(CPP文件)和测试运行程序(VC++6.0的EXE文件)。通过本系统,可以显示算法的源代码以及运行结果。具体操作步骤如下: 1.选择相应章 单击演示系统界面右侧章选择按钮。 例如,要选择第6章,则单击“第6章”选择按钮。 当相应章被选择后,窗口的右侧部分将列出本章的算法选择按钮。 例如,选择第6章后,窗口的右侧部分将显示第6章中的算法6.1-6.13和6.15的选择按钮。由于书中的算法6.14和6.16只是示意性算法,故未给出源码,其按钮上的文字为灰色,处于“无效”状态。 2.选择相应章中的算法 单击窗口右侧部分所列举的本章某个算法选择按钮,被选择的算法的源码将在窗口左侧空白区域中显示。对于较长的源码,单击显示区域后,可用键盘的光标键和翻页键浏览源码。 例如,选择了第6章中的算法6.5后界面如图2所示: 图2 选择算法6.5 3.运行测试程序 单击窗口上部的“运行”按钮,将弹出运行窗口,运行所选算法的测试程序。若运行按钮为灰色,表示该算法无单独测试程序。 例如,算法6.5的测试运行窗口如图3所示: 图3 测试运行窗口 测试运行说明: 测试运行窗口显示程序的执行过程及结果。若在显示过程中出现运行窗口无法正常演示的情况,只需调节运行窗口大小即可正常显示(调节最小化按钮或窗口最大化/还原按钮“ ”)。 三、退出演示系统 使用完毕后,单击窗口右上角关闭按钮“ ”退出演示系统。 四、测试程序示例 在《数据结构》的课程教学中,各抽象数据类型的设计与实现是重要的学习和实践环节。为此,本系统只给出了各算法源码的测试程序的可执行文件。在此,给出算法6.5的测试程序示例,以供参考。 算法6.5是中序遍历线索二叉树的非递归算法,要对其源码进行测试,可首先调用算法6.6及6.7建立中序线索二叉树。以下是测试程序的源码,相关类型和辅助函数定义在文件include06.h和include06.cpp中,此略。 // test0605.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "include06.h" // 相关类型和辅助函数的定义 BiThrTree pre; // 线索二叉树遍历辅助变量 #include "algo0607.cpp" // 算法6.7源码 #include "algo0606.cpp" // 算法6.6源码 #include "algo0605.cpp" // 算法6.5源码 int main(int argc, char* argv[]) { char gl_str[64]; BiThrTree T; BiThrTree Thrt; printf("*******************************************\n"); printf("* 《数据结构》(C语言蔚敏,吴伟民 *\n"); printf("* 算法6.5, 6.6 & 6.7 *\n"); printf("*******************************************\n"); srand((unsigned)time(NULL)); // 随机函数初始化 T=NULL; // 空二叉树T for (int pass=0; pass<5; pass++) { // 测试运行5次,第一次为空树 outBiThrTree(T,gl_str); // 以类广义表的形式输出二叉树T到gl_str printf("T = %s\n", gl_str); // 显示 pre = NULL; Status r = InOrderThreading(Thrt, T); // 算法6.6,6.7,中序线索化 printf("InOrderThreading(Thrt, T) : %s\n", (r) ? "OK" : "ERROR"); initVisitStr(); // 将visitStr清为空串 InOrderTraverse_Thr(Thrt, v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值