1、数据结构清华大学出版社严蔚敏吴伟民编著第一章 绪论1、 数据结构是计算机中 存储、组织数据 的方式。精心选择的数据 结构可以带来 最优效率 的算法。2、 程序设计 = 算法 +数据结构3、 解决问题方法的效率:跟数据的组织方式有关跟空间的利用效率有关跟算法的巧妙程度有关4、 数据 :所有能输入到计算机中 ,且被计算机处理的符号的集合, 是计算机操作对象的总称;是计算机处理的信息的某种特定的符号表示形式。5、 数据元素 :数据中的一个“个体” ,数据结构中讨论的基本单 位。 相当于“记录” ,在计算机程序中通常作为一个整体考 虑和处理。6、 数据项 : 相当于记录的“域”, 是数据的不可分割的最
2、小单位 如学号。数据元素是数据项的集合。7、 数据对象 :性质相同的数据元素的集合 .例如 : 所有运动员的记录集合8、 数据结构 :是相互间存在某种关系的数据元素集合。9、 数据结构是带结构的数据元素的集合。10、 不同的关系构成不同的结构。11、 次序关系 :|i=1,2,3,4,5,612、 对每种数据结构,主要讨论如下两方面的问题:1) 数据的逻辑结构,数据结构的基本操作;2) 数据的存储结构,数据结构基本操作的实现;13、 数据的逻辑结构: 数据之间的结构关系,是具体关系的抽象。 数据结构的基本操作: 指对数据结构的加工处理。14、 数据的存储结构 (物理结构 ): 数据结构在计算机
3、内存中的表示。 数据结构基本操作的实现: 基本操作在计算机上的实现(方法 )。15、 数据结构的有关概念16、数据元素的 4 类的基本结构 :1集合;2线性结构:结构中数据元素之间存在一对一的关系;3树形结构:结构中数据元素之间存在一对多的关系;24 图状结构或网状结构:结构中数据元素之间存在多对多 的关系。17、 C语言的优点:C语言可以直接操作内存。18、 每个节点都由两部分组成: 数据域和指针域 。19、 链接存储结构特点:比顺序存储结构的存储密度小(每个节点都由数据域和指针域组成 )。 逻辑上相邻的节点物理上不必相邻。插入、删除灵活 (不必移动节点,只要改变节点中的指针 )。20、 数
4、据类型 是一个值的集合和定义在此集合上的一组操作的 总称。21、 ADT 有两个重要特征 :数据抽象 和数据封装 。22、 抽象数据类型(Abstract Data Type简称ADT):是指一个数 学模型以及定义在此数学模型上的一组操作。23、 抽象数据类型有: 数据对象 数据对象的定义 、数据关系数据关系的定义、 基本操作 基本操作的定义 。24、 数据类型的定义和含义。 定义:数据类型是一个值的集合和定义在这个值集上的一组 操作的总称。含义:将数据按一定次序与形式存放的结构。24、算法空间复杂度 S(n) 算法的存储量包括:1输入数据所占的空间;2程序本身所占的空间;3辅助变量所占的空间
5、。25、 算法具有 有穷性、确定性、可行性、输入和输出五大特性。26、 抽象数据类型具有 数据抽象、数据封装 的特点。27、 数据的储存结构分为: 顺序存储结构 和 链式存储结构 。 第二章 线性表1、线性结构的特点:在数据元素中的非空有限集中。(1)存在唯一的一个被称作“第一”的数据元素;(2)存在唯一的一个被称作“最后一个”的数据元素;(3)除第一个外,集合中的每一个数据元素均只有一个前驱;(4)除最后一个外,集合中的每一个数据元素均只有一个后继。2、线性表 (Linear List) :一个线性表是 n 个数据元素的有限序列3、线性表的顺序存储实现:typedef struct Elem
6、entType DataMAXSIZE;int Last; List;List L, *PtrL;4、初始化(建立空的顺序表)List *MakeEmpty( ) List *PtrL;PtrL = (List *)malloc( sizeof(List) );PtrL-Last = -1;return PtrL;5、查找int Find( ElementType X, List *PtrL ) int i = 0;while( i Last & PtrL-Datai!= X )i+;if (i PtrL-Last) return -1; /* 如果没找到,返回 -1 */else retur
7、n i; /* 找到后返回的是存储位置 */6、插入算法void Insert( ElementType X, int i, List *PtrL ) int j;if ( PtrL-Last = MAXSIZE-1 )/* 表空间已满, 不能插入 */ printf( 表满 );return;if ( i PtrL-Last+2) /*检查插入位置的合法性 */ printf( 位置不合法 );return;for ( j = PtrL-Last; j = i-1; j- )PtrL-Dataj+1 = PtrL-Dataj; /* 将 ai an 倒序向后移动 */PtrL-Datai-1
8、 = X; /* 新元素插入 */PtrL-Last+; /*Last 仍指向最后元素 */ return;7、删除算法void Delete( int i, List *PtrL ) int j;if( i PtrL-Last+1 ) /* 检查空表及删除位置的合法性 */printf (不存在第d个元素” ,i ); return ;for ( j = i; j Last; j+ )PtrL-Dataj-1 = PtrL-Dataj; /* 将 ai+1 an顺序向 前移动*/PtrL-Last-; /*Last 仍指向最后元素 */ return;8、求表长int Length ( Li
9、st *PtrL ) List *p = PtrL; /* p 指向表的第一个结点 */int j = 0;while ( p ) p = p-Next;j+; /* 当前 p 指向的是第 j 个结点 */return j;9、查找( 1)按序号查找 : FindKth;List *FindKth( int K, List *PtrL ) List *p = PtrL;int i = 1;while (p !=NULL & i Next;i+;if ( i = K ) return p;/* 找到第 K 个,返回指针 */else return NULL;/* 否则返回空 */( 2)按值查找
10、 : FindList *Find( ElementType X, List *PtrL )List *p = PtrL;while ( p!=NULL & p-Data != X )p = p-Next;return p;10、插入(在链表的第i-1(1w iw n+1)个结点后插入一个值为 X的新 结点 )List *Insert( ElementType X, int i, List *PtrL ) List *p, *s;if ( i = 1 ) /* 新结点插入在表头 */s = (List *)malloc(sizeof(List); /*申请、填装结点 */ s-Data = X
11、;s-Next = PtrL;return s; /* 返回新表头指针 */p = FindKth( i-1, PtrL ); /* 查找第 i-1 个结点 */if ( p = NULL ) /* 第 i-1 个不存在,不能插入 */printf(H 参数 i 错);return NULL;else s = (List *)malloc(sizeof(List); /*申请、填装结点*/s-Data = X;s-Next = p-Next; /* 新结点插入在第 i-1 个结点的后面 */p-Next = s;return PtrL;11、删除(删除链表的第i (1Next; free(s)
12、;*/return PtrL;if ( p = NULL ) NULL;NULL; elseprintf(第小个结点不存在”卜1);printf( 第%d个结点不存在” j);p-Next = s-Next;/*从链表中删除*/free(s);/*释放被删除结点*/retur n PtrL;12、链表不具备的特点是可随机访问任一节点 插入删除不须要移动元素3不必事先估计存储空间 所需空间与其长度成正比13、带头结点的单链表head为空的判定条件是 2 14、如果最常用的操作是取第i个结点及其前驱,则采用 存储方式最节省时间。单链表 双链表 单循环链表 顺序表第三章 Chapter 3 栈(st
13、acks)和队列(queues)1、 栈是限定仅能在表尾一端进行 插入、删除 操作的线性表。2、 栈的特点是“后进栈的元素先出栈” (last in, first out),故栈又 称为后进先出表( LIFO)。3、 一个栈是一些元素的线形列表,其中元素的插入和删除均在表的同一端进行。插入和删除发生的一端称为栈顶 (the top of thestack)。4、 第一个进栈的元素在栈底,5、 最后一个进栈的元素在栈顶, 第一个出栈的元素为栈顶元素, 最后一个出栈的元素为栈底元素。6、 连续栈(Contiguous Stack的类型定义#define MaxStack 50Typedef structdatatype stackMaxStack;int top;Seqstack;Seqstack *s;7、 判断栈是否已满viod Push(Seqstack *s, datatype x )if (s-top=MaxStack-1) printf(“ overflow ” ); else s- top+;s-stacks-top=x;8、 判断栈是否为空datatype pop(Seqstack *s ) if (s-topstacks-top); s-top-;9、 返回栈顶元素的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1