数据结构笔记(pdf)

合集下载

数据结构笔记

数据结构笔记

数据结构笔记基础:数据结构与算法(一)数据结构基本概念数据(data):是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号总称数据元素(data element):是数据的基本单位,在计算机中通常被当做一个整体进行考虑和处理数据对象(data object):性质相同的数据元素的集合,是数据的一个子集数据结构(data structure):相互之间存在一种或多种特定关系的数据元素的集合4类基本结构:集合、线性结构、树形结构、图形(网状)结构数据结构的形式定义为数据结构是一个二元组Data Structure = (D,S),其中D是数据元素的有限集,S是D上关系的有限集数据结构定义中的“关系”描述的是数据元素之间的逻辑关系,因此又称为数据的逻辑结构数据结构在计算机中的表示(映像)称为物理结构(存储结构)计算机中表示信息的最小单位是二进制中的一位,叫做位(bit),一到若干位组成一个位串表示一个数据元素,这个位串称为元素或结点数据结构之间关系在计算机中的表示有两种:顺序映像、非顺序映像,并由此得到两种存储结构:顺序存储、链式存储,前者运用相对位置表示数据元素间的逻辑结构,后者借助指针任何一个算法的设计取决于数据(逻辑)结构,而实现依赖于存储结构数据类型是一个值的集合和定义在这个值集上的一组操作的总称数据类型分两种:原子类型、结构类型,前者不可分解(例如int、char、float、void ),后者结构类型由若干成分按某种结构组成,可分解,成分既可以是非结构的也可以是结构的(例:数组)抽象数据类型(Abstract Data Type ):是指一个数学模型及定义在该模型上的一组操作(P8)抽象数据类型格式如下:ADT抽象数据类型名{数据对象:<数据对象的定义>数据关系:<数据关系的定义>数据操作:<数据操作的定义>}ADT抽象数据类型名基本操作格式如下:基本操作名(参数表)初始条件:<初始条件描述>操作结果:<操作结果描述>多形数据类型(polymorphic data type):是指其值得成分不确定的数据类型(P9)抽象数据类型可由固有数据类型来表示和实现(二)算法(概念)和算法分析(时、空性能)算法(algorithm):对特定问题求解步骤的一种描述算法5特性:有穷、确定、可行、输入、输出1、有穷性:算法必须在可接受的时间内执行有穷步后结束2、确定性:每条指令必须要有确切含义,无二义性,并且只有唯一执行路径,即对相同的输入只能得相同输出3、可行性:算法中的操作都可通过已实现的基本运算执行有限次来完成4、输入:一个算法有一到多个输入,并取自某个特定对象合集5、输出:一个算法有一到多个输出,这些输出与输入有着某些特定关系的量算法设计要求(好算法):正确性、可读性、健壮性、效率与低存储需求健壮性是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。

“数据结构”读书笔记

“数据结构”读书笔记

“数据结构”读书笔记示例:第2章线性表学习线索:逻辑结构→基本运算定义→存储结构→基本运算实现(复杂度分析→应用实例)1. 逻辑结构:是由n(n≥0)个数据元素组成的有限序列。

2. 基本运算定义:(P.16)(1)Init_List(L),线性表初始化;(2)Length _ List (L),求线性表的长度;(3)Get_ List (L,i),取表元;(4)Locate_ List (L,x),按值查找;(5)Insert_ List (L,x,i);插入操作;(6)Delete_ List (L,i),删除操作。

3. 存储结构:(1)顺序表:把线性表的结点按逻辑次序存放在一组地址连续的存储单元里。

顺序存储的结构体定义:typedef struct{ datatype data[MAXSIZE]; /* 一维数组子域*/int last; /* 表长度子域*/} SeqList; /* 顺序存储的结构体类型*/4-1. 顺序表的基本运算的实现(算法及其复杂度分析、应用实例:顺序表的划分、合并、比较大小)(2)单链表:只有一个链域的链表称单链表。

结点结构:Data(节点值)Next(后继结点地址)其中data是数据域,next是指针域链式存储的结构体定义:typedef struct lnode{ datatype data; /* 数据子域*/struct lnode *next; /* 指针子域*/} LNode,*LinkList; /* 链式存储的结点结构类型*/4-2. 单链表的基本运算的实现(算法及其复杂度分析、应用实例:链表逆置、归并)单链表的发展:循环链表、双向链表顺序表和链表的比较1)基于空间:2)基于时间:“数据结构”读书笔记(线性结构部分)第1章绪论1. 数据:信息的载体,能被计算机识别、存储和加工处理。

2. 数据元素:数据的基本单位,可由若干个数据项组成,数据项是具有独立含义的最小标识单位。

数据结构笔记

数据结构笔记

数据结构笔记主要内容:基础知识:基本问题问答(概念)算法分析:教材典型例题算法思路简述算法设计:严题集一题多解,典型题详细分析重点题分析:严每章题集已经考题,相似题数据结构笔记特点:实用,详细,易于理解(用通俗语言描述复杂问题),针对性强,覆盖面广,定期公布,题目累加![center]第一章绪论[/center]一、基本问题问答:1、什么叫数据结构?如何理解“数据结构”?如何树立数据结构的学习体系?广义上的数据结构指的是:逻辑结构和物理结构。

狭义上的数据结构专指逻辑结构,就是元素间的逻辑关系,主要类型有:集合型,线性结构,树型,图型!整个数据结构的课程就是围绕着以上几种数据类型展开的,加上基于这些结构的基本操作:插入,删除,查找,取元素,取长度等等。

另外,还有基于这些数据结构的较为复杂的算法:查找和排序。

在严老师和其他很多的数据结构教材中都把查找和排序作为了一个独立的部分,这一部分实际上主要在探讨算法,而不在是结构本身了。

算法的概念将在后面提到。

2、数据的物理结构和逻辑结构定义数据结构,当计算机程序运行时,程序就按照定义给这些数据分配了空间。

而数据定义,是在定义其逻辑结构。

以链表为列,在实际定义时,一个个的结点,由于其指针域可以指向另一个结点,那么依靠这种指向关系,就可在逻辑上建立起一条链状结构!但是,在实际的程序执行时,是不会有这样的一条链的,而是通过在一个结点空间的某个空间内填入了下一个结点的地址!这样的每个有数据和地址的结点,才是其物理结构。

3、算法的概念、分析,算法时间复杂度的含义及分析算法就是解决问题的方法或策略。

一个算法好与坏的评价标准是:正确,可读,健壮,效率高,空间省!设计算法时,应该按照严教材上关于类C(或类P)语言的描述来作,格式为:status fun_name{//算法说明for{ .... };//典型功能及复杂语句后加注释}//fun_name注意写好注释!不求多,但求精!时间复杂度:分析算法效率的重要工具。

数据结构考研笔记整理(全)

数据结构考研笔记整理(全)

数据结构考研笔记整理(全)一、第二章线性表●考纲内容●一、线性表的基本概念●线性表是具有相同数据结构类型的n个数据元素的有限序列;线性表为逻辑结构,实现线性表的存储结构为顺序表或者链表●二、线性表的实现●1、顺序表●定义(静态分配)●#define MaxSize 50 \\ typedef struct{ \\ ElemType data[MaxSize];\\ intlength;\\ }SqList;●定义(动态分配)●#define MaxSize 50\\ typedef strcut{\\ EleType *data; //指示动态非配数组的指针\\ int MaxSize,length;\\ }SqList;●c的动态分配语句为L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);●c++动态分配语句为L.data=new ElemType[InitSize];●插入操作●删除操作●按值寻找●2、链表●单链表●单链表的定义●●头插法建立单链表●●尾插法建立单链表●●按序号查找getElem(LinkList L,int i)和按值查找locateElem(LinkListL,ElemType e)●插入结点(后插)●p=getElem(L,i-1); //查找插入位置的前驱结点\\ s.next=p.next;\\p.next=s;●将前插操作转化为后插操作,即先将s插入的p的后面然后调换s和p的数据域●s.next=p.next;\\ p.next=s.next;\\ temp=p.data;\\ p.data=s.data;\\s.data=temp;●删除结点●p.getElem(L,i-1);\\ q=p.next;\\ p.next=q.next;\\ free(q);●双链表(结点中有prior指针和next指针)●循环链表●静态链表●借助数组来描述线性表的链式存储结构,结点中的指针域next为下一个元素的数组下标●三、线性表的应用●使用的时候如何选择链表还是顺序表?●表长难以估计,经常需要增加、删除操作——链表;表长可以估计,查询比较多——顺序表●链表的头插法,尾插法,逆置法,归并法,双指针法;顺序表结合排序算法和查找算法的应用●小知识点(选择题)二、第三章栈,队列和数组●考纲内容●一、栈和队列的基本概念●栈:后进先出,LIFO,逻辑结构上是一种操作受限的线性表●队列:先进先出,FIFO,逻辑结构上也是一种操作受限的线性表●二、栈和队列的顺序存储结构●栈的顺序存储●●队列的顺序存储●进队:队不满时,送值到队尾元素,再将队尾指针加一●出队:队不空时,取队头元素值,再将队头指针加一●判断队空:Q.front==Q.rear==0;●循环队列(牺牲一个单元来区分队空和队满,尾指针指向队尾元素的后一个位置,也就是即将要插入的位置)●初始:Q.front==Q.rear●队满:(Q.rear+1)%MaxSize=Q.front●出队,队首指针进1:Q.front=(Q.front+1)%MaxSize●入队,队尾指针进1:Q.rear=(Q.rear+1)%MaxSize●队列长度:(Q.rear+MaxSize-Q.front)%MaxSize●三、栈和队列的链式存储结构●栈的链式存储●●队列的链式存储●实际是上一个同时带有头指针和尾指针的单链表,尾指针指向单链表的最后一个结点,与顺序存储不同,通常带有头结点●四、多维数组的存储●行优先:00,01,02,10,11,12●列优先:00,10,01,11,02,12●五、特殊矩阵的压缩存储●对称矩阵●三角矩阵●三对角矩阵(带状矩阵)●稀疏矩阵●将非零元素及其相应的行和列构成一个三元组存储●十字链表法●六、栈、队列、数组的应用●栈在括号匹配中的应用●栈在递归中的应用●函数在递归调用过程中的特点:最后被调用的函数最先执行结束●队列在层次遍历中的应用●二叉树的层次遍历●1跟结点入队●2若队空,则结束遍历,否则重复3操作●3队列中的第一个结点出队并访问,若有左孩子,则左孩子入队;若有右孩子,则右孩子入队●重点为栈的(出入栈过程、出栈序列的合法性)和队列的操作及其特征●小知识点(选择题)●n个不同元素进栈,出栈元素不同排列的个数为{2n\choose n }/(n+1)●共享栈是指让两个顺序栈共享一个存储空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸,可以更有效的利用存储空间,同时对存储效率没有什么影响●双端队列是指允许两端都可以进行入队和出队操作的队列●输出受限的双端队列:允许两端插入,只允许一端删除●输入受限的双端队列:允许两端删除,只允许一端插入三、第四章串●考纲内容●字符串模式匹配●暴力算法●注意指针回退时的操作是i=i-j+2;j=j+1;●kmp算法●手工求next数组时,next[j]=s的最长相等前后缀长度+1,其中s为1到j-1个字符组成的串●在实际kmp算法中,为了使公式更简洁、计算简单,如果串的位序是从1开始的,则next数组需要整体加一;如果串的位序是从0开始的,则next数组不需要加一●根据next数组求解nextval数组:如果p[j]==p[next[j]],则nextval[j]=nextval[next[j]],否则nextval[j]=next[j];●小知识点●串和线性表的区别:1线性表的数据元素可以不同,但串的数据元素一般是字符;2串的操作对象通常是子串而不是某一个字符四、第五章树与二叉树●考纲内容●一、树的基本概念●定义●树是一种递归的数据结构,是一种逻辑结构●树的性质●结点数为n,则边的数量为n-1●树中的结点数等于所有结点的度数之和加1(一个结点的孩子个数称为该结点的度,树中结点的最大度数称为树的度,每一条边表示一个结点,对应一个度,只有根结点上面无边,故结点树=度数之和+1)●度为m的树中第i层至多有m^{i-1}个结点(i\geq1)(m叉树的第i层最多有m^{i-1}个结点)●高度为h的m叉树至多有(m^h-1)/(m-1)个结点(假设每一个结点都有m个孩子,则由等比数列的求和公式可以推导出该式子)●具有n个结点的m叉树的最小高度是\lceil log_m(n(m-1)+1)\rceil(由高度为h的m叉树的最大结点树公式有,n满足式子(m^{h-1}-1)/(m-1) \leq n\leq (m^h-1)/(m-1))●高度为h的m叉树至少有h个结点;高为h,度为m的树至少有h+m-1个结点(m叉树并不等于度为m的树,m叉树可以为空树,要求所有结点的度小于等于m,而度为m的树一定有一个结点的度数为m)●二、二叉树●二叉树的定义及其主要特征●定义●特点●每个结点至多只有两颗子树●二叉树是有序树,其子树有左右之分,次序不能颠倒,否则将成为另一颗二叉树,即使树中结点只有一颗子树,也要区分他是左子树还是右子树●特殊的二叉树●满二叉树:高度为h,结点数为2^h-1,所有叶子结点都集中在二叉树的最下面一层,除叶子结点外的所有结点度数都为2,从根结点为1开始编号,对于编号为i的结点,其父结点为\lfloor i/2 \rfloor,左孩子(若有)编号为2i,右孩子(若有)编号为2i+1,所以编号为偶数的结点只可能是左孩子,编号为奇数的结点只可能是右孩子●完全二叉树:删除了满二叉树中编号更大的结点,高为h,结点数为n的完全二叉树的每个结点的编号都与高度为h的满二叉树中编号为1到n的结点相同。

老师整理的数据结构笔记

老师整理的数据结构笔记

数据结构内容:1、数据结构理论、线性表、单链表、双链表、内核链表2、栈(顺序栈、链栈)和队列(顺序队列、链队列)3、树和二叉树4、查找(顺序查找、折半查找、hash表)和排序(直接插入排序、折半排序、链表排序、shell排序、冒泡排序、快速排序)5、小项目:航空查询系统第一天:数据结构任务:将实际中的问题转化为计算机可以处理的问题。

原子类型(不可以再分):(int、char、float、.....);结构类型:结构体,用户可以根据自己的需要去定义;逻辑结构:线性(线性表、链表)和非线性(树、图)存储结构:顺序存储(数组)-->数据的存储结构可以直接反映它的逻辑结构优点:只要知道存储的首地址、可以实现随机访问缺点:1、需要开辟成片的空间;2、在插入和删除时,会造成数据成片的移动链式存储(链表)--->通过存储地址的指针表示数据元素间的逻辑关系索引存储:采用目录结构的方式,不断缩小查找范围hash表存储:是一种查找效率最高的存储方式。

算法:查找、排序、插入、删除、修改算法定义:解决问题的步骤算法评价的标准:1、时间复杂度2、空间复杂度,指的是除了运算数据本身以外的额外空间3、算法的可读性(程序的风格和编程规范)和可维护性(代码的封装);线性表:除了第一个元素和最后一个元素,对于中间的任何一个元素有且仅有一个直接前驱和一个直接后继。

顺序表:线性表的顺序存储在算法的实现中,对于每一个操作步骤,尽量都封装成一个函数,来提高代码的可读性。

//=====================顺序表算法===============================typedef struct list //顺序表的类型//{datatype data[maxsize]; //为顺序表的开辟存储空间//int last; //当前顺序表最后一个元素的下标,用来说明顺序表的长度//}sqlist; *sqlink; // 顺序表说明符sqlist ==> struct listsqlink ==> struct list *sqlink L;L=(sqlink)malloc(sizeof(sqlist));//初始化L->last=-1//线性表的插入算法;1、在插入之前判断表是否为满2、判断插入点是否合法3、顺序移位4、插入数据5、将L->last++//线性表的删除算法;1、在删除之前判断表是否为空2、判断删除点是否合法3、顺序移位,将要删除的元素覆盖4、将L->last--。

数据结构读书笔记【第一章】

数据结构读书笔记【第一章】

数据结构读书笔记【第⼀章】这⼀部分内容是关于数据结构的⼀些基础概念,这有助于我们理解后续的内容:【1】数据:对客观事物的符号表⽰,在计算机中是指所有能输⼊到计算机处理的符号的总称。

【2】数据元素:数据组成的基本单位,元素⼀般作为数据结构中的⼀个整体考虑和处理,可能包含多个数据项,例如表中的⼀条记录为⼀个数据元素,但含有多个数据项。

【3】数据对象:指的是性质相同的数据元素组成的集合,是数据的⼀个⼦集。

【4】数据结构:相互之间存在⼀种或多种特定关系的数据元素的集合。

【逻辑结构】这⾥元素之间的关系可以分为⼏类:第⼀种是集合关系,第⼆种是线性的关系,单链表就是这样⼀种关系,第三种和第四种分别是树形关系和图形关系,也就是对应于树和图。

上⾯描述这么多,最关键就是为了说明数据和关系两个概念。

这⾥的关系指的是逻辑关系,例如两个数据a,b按照复数的逻辑关系组织且a为实部,b为虚部。

【存储结构】有了数学上的数据结构概念,我们还需要把数据映射到计算机中表⽰(存储结构),也就是将数据和关系⽤计算机语⾔来表⽰出来,⼀个位串可以表⽰⼀个数据元素(8位可以⽤来表⽰字符),通常称这个位串为元素,如果⼀个位串包含多个数据项,对应于每个数据项的被称为数据域。

根据不同表⽰⽅法可以得到顺序和链式两种存储结构。

总结上⾯的内容就是⼀个算法的设计取决于逻辑结构,算法的实现依赖存储结构。

【数据类型】为了⽅便表⽰存储结构,⾼级程序语⾔借助数据类型来对它进⾏描述。

数据类型的定义是⼀个值的集合和这个值集上⼀组操作的总称。

根据值的不同特性,数据类型⼜可以分为两类:⼀类是⾮结构的“原⼦类型”(整形、指针),另⼀类是”结构类型“(数组),结构类型的值是若⼲成分按照某种结构组成,这⾥的成分既可以是结构的也可以是⾮结构的。

由于数据结构可以看作是⼀组具有相同结构的值,所以结构类型也可以看作是数据结构和定义在上⾯的⼀组操作来构成的。

数据类型不仅可以表⽰存储关系,还可以定义⼀组该类型的操作。

数据结构知识点-个人笔记

数据结构知识点-个人笔记

数据结构知识点-个人笔记(总37页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--《数据结构与算法》复习第1部分:1. 概念:数据结构,存储结构,逻辑结构注:磁盘文件管理系统是树状结构。

基本概念(1)数据:指所有能够输入到计算机中并被计算机程序处理的符号的总称(图像声音都可以通过编码归于数据的范围),范围大(2)数据项:数据的不可分割的最小单元(3)数据元素:是数据的基本单位,有若干数据项组成,通常作为一个整体考虑(4)数据对象:性质相同的数据元素的集合,是数据的一个子集。

例子:表A表B其中,A 表为成绩表,B 表为学生信息表,这两张表就是数据;单独的一张表就称为数据对象,即A 和B 表都是一个数据对象;每张表中的每一行就称为数据元素;姓名,性别,身高,科目,分数就称为数据项 数据结构定义:相互之间存在一种或多种特定关系的数据元素的集合,这种关系包括三方面的内容,即数据逻辑结构,数据存储结构,数据的操作。

2.数据元素是组成数据的基本单位3.算法,算法分析,算法特性,时间复杂度算法:描述求解问题方法操作步骤的集合。

(不是所有的程序都是算法,要满足五个特性)时间复杂度定义:在算法分析中,一般用算法中的语句的执行次数来度量算法的时间效率,时间效率也就是时间复杂度。

计算方法:对于问题规模为n 的某个函数f(n),算法时间复杂度记为T(n),存在一个正常数c ,使cf(n)>T(n)恒成立,则T(n)=Of(n),称Of(n)为时间复杂度。

时间复杂度的大O 表示法:保留最高次数项,令最高次数项的系数为1。

例如O(8)->O(1),O(2n^3+2n^2)->O(n^3),O(n*log2 n)第2部分1. 线性表的概念,特点,存储结构.1线性表的概念:线性表是最简单,最常见,最基本的一种线性结构(数据的逻辑结构的一种),元素之间为线性关系,即除了第一个和最后一个元素之外,所有的元素都有前驱和后继元素,同一个线性表中的数据类型相同。

数据结构知识点笔记

数据结构知识点笔记

数据结构知识点笔记一、数据结构的概念数据结构是计算机科学中一门重要的学科,它研究如何组织和存储数据,以便高效地访问和操作。

数据结构可以分为物理结构和逻辑结构两个层次。

物理结构指数据在计算机内存中的存储方式,而逻辑结构则指数据之间的逻辑关系。

二、常用的数据结构1. 数组(Array)数组是最基本的数据结构之一,它以连续的存储空间来保存相同类型的数据。

数组的特点是可以通过下标快速访问元素,但插入和删除操作较慢。

2. 链表(Linked List)链表是一种动态数据结构,它通过指针将一组节点串联起来。

链表的特点是插入和删除操作效率高,但访问元素需要遍历整个链表。

3. 栈(Stack)栈是一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。

栈主要用于函数调用和表达式求值等场景。

4. 队列(Queue)队列是一种先进先出(FIFO)的数据结构,只能在队列的一端进行插入操作,在另一端进行删除操作。

队列主要用于任务调度和缓冲区管理等场景。

5. 树(Tree)树是一种非线性的数据结构,由父节点和子节点组成。

树常用于组织和管理具有层级关系的数据,如文件系统和数据库索引等。

6. 图(Graph)图是一种由节点和边组成的数据结构,节点表示数据,边表示节点之间的关系。

图广泛应用于网络分析和路径搜索等领域。

三、常见的数据结构操作1. 插入(Insert)插入操作将新的数据元素加入到数据结构中的特定位置。

不同的数据结构插入操作的复杂度各不相同,需要根据具体情况选择合适的数据结构。

2. 删除(Delete)删除操作将指定的数据元素从数据结构中移除。

和插入操作一样,删除操作的复杂度也依赖于具体的数据结构。

3. 查找(Search)查找操作用于在数据结构中寻找指定值的元素。

不同的数据结构采用不同的查找算法,如线性查找、二分查找和哈希查找等。

4. 排序(Sort)排序操作将数据结构中的元素按特定规则重新排列。

排序算法可以分为比较排序和非比较排序两种类型,如冒泡排序、快速排序和归并排序等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构学习笔记总结【】注意量词首先,个,长没有0开始的。

位,数组从0开始的。

个比长多一,位比数多一,个长比位数多一。

个位在前。

个位可扩展1.【1个长0位数】【个-第几个,位-指针】【个在插入时比长多1,比较相等】【*取地址,elemtype *任何类型】【L.elem首地址+L.length-1,&引用回传(L.elem数组名[L.length-1]),没有&就是单纯用到不改变】p是指针也就是地址,p=L.elem+L.length-1中L.elem表示第一个地址,p = &(L.elem[L.length-1]L.elem表示数组名。

注意地址在前,数组和长度length在后并排,但数组从0开始。

注意*是取地址的内容,*q = e;即q的内容被e代替了,但elemtype *表示定义所有的数据结构,ElemType *q = &(L.elem[i-1]);这边要注意数组从0开始,【i++我玩带你,目前就一人玩,等下加1。

++i你和我玩。

你和我一起,在玩。

】【=加1】【 *++p 你和我玩 == ++p ,*p】【for(;;)第2个分号后面的语句是在每次循环结束后执行的,所以没影响】【循环并列先执行第一个,在执行第二个】线性表【GetElem(Lb, i, e); 取lb第i个给e,自己定义的】【Lb_len = ListLength(Lb); 长】【LocateElem(La, e, equal) la取e相同的】【ListInsert(La, ++La_len, e);e插在la第La_len+1个】【LIST_INIT_SIZE*sizeof(ElemType) 内存是 size * LIyyfST_INIT_SIZE 的乘积】【L.length < L.listsize 才能未满,长小于空间长】顺序线性表for (++p; p<=q; ++p) *(p-1) = *p; p为要删除的位置,本来是*p= *(p+1);但注意从后往前移动p+1不能大于q 删除的后一位不能大于最后一位,所以开始p=p+1.后面排序减1【左移后给前后不大于最后一位或者跳q-p次到q位移动q-p次各左移1次】【跳q-p次到q位,左覆盖一次】【 exit(OVERFLOW);存储分配失败】单链表&代表传地址引用,无代表传值引用。

*声明一个指针,指向l的地址。

严的书中,只要l的数据结构有改变,都用的是&,不改变的用的是无。

【LinkList &L传地址引用 LinkList *L声明指针指向地址 LinkList L单纯用】【p,L的类型应该都是自己定义的结构体 Node 是个指针!!!】【L为带头结点的单链表的头指针】【typedef struct{ elemtype *elem; int length;int listsize;}sqlist线性表结构】【typedef struct Lnode{ elemtype date; struct Lnode *next}Lnode.*linklist 单链表结构】【->是结构体中的运算符,表示使用这个结构体中的某个指针变量。

而我们定义的结构体中】【p = L;就是把让自己定义的Node p = 头结点,而p = L->next就是让p =头结点的后一个节点。

】【当p等于某个结点时可以代替它,相当于同步了】【while (p->next && j < i-1) 注意删除要考虑p->next,插入要考虑pp = p->next;++j;}】【用了->符号说明L本身是指针。

不长记性,p和p->next都是指针】【->next------p------>data】【1个长 0指数跳几加几】1.带头节点的链表的插入,首先使用临时变量p等于要插入之前的节点(不管具体的插入位置),之后不管要插入的节点x是插到链表头还是插到链表的其他位置都是如下语句: x->next = p->next;p->next = x;2.不带头结点的链表的插入,若要插到链表的开头则x->next = head->next;head = x;//这里不再是head->next = x若插到链表的其他位置则p = 插入之前的节点x->next = p->next;p->next = x;【pc->next = pa ? pa : pb;if(pa)pc-> next = pa;elsepc-> next = pb; 】【pc->next = pa; pc = pa; pa = pa->next;pc->next = pa;pc = pa;可写成 pc->next=pa; pc=pc->next; 】p->prior->next=p->next的意思就是p所指向链表节点的上一个结构体的成员变量(struct_temp指针变量next)。

这里把它赋值为 p所指向节点的下一个。

也就是直接将p的上一个节点和 p的下一个节点连接起来。

【struct struct_temp{struct_temp *prior; //指向上一个struct_temp结构体变量的指针。

struct_temp *next; //指向下一个struct_temp结构体变量的指针。

};】【p->prior->next = p->next->prior = p把后继节点的前驱指向自己把前驱节点的后继指向自己这就连接好了双向箭头。

】【时间复杂度for(i=1; i<=n;) i=i*2; 一般来说是n次所以是常数让i=i*2出现的次数为f(n)也就是2(第一次赋值从2开始)f(n)次方,<n可以得到f(n)=log2n注意T(n)=O(log2n)】【(n-1)+(n-2)+...+2+1=n(n-1)/2=O(n^2).】数据结构是数据对象与对象中数据元素之间关系的集合。

(×)数据元素数据元素之间关系√算法与程序有区别,算法是解决问题的方法或步骤,而程序是用编程语言描述算法后形成的。

在数据结构中二者不是通用的。

栈的工作模式是“先进后出”的模式队列的操作方式是“先进先出”的模式通常要求同一逻辑结构中的所有数据元素具有相同的特性,不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致13.链表不具备的特点是 A 。

A.可随机访问任一结点 B.插入删除不需要移动元素C.不必事先估计存储空间 D.所需空间与其长度成正比若不带头结点的单链表中,头指针为head,则该链表为空的判定条件是(A.)。

A.head==NULLB.head->next==NULLC.head!=NULLD.head->next==head链表为空的判定条件。

题目中给出的单链表head是不带头结点的单链表,头结点是指在单链表head第一个结点之前附设的一个结点,头结点的数据域可以不存放任何数据信息,而其指针域存放指向第一个结点的指针。

在题目中告诉了我们,第一个结点的指针为head,而整个单链表的存储必须从第一个结点进行,如果链表为空,则说明第一个结点为空,因此链表为空的判定条件是head==NULL。

带头结点的单链表head为空的判定条件是 bA.head==NULLB.head->next==NULLC.head!=NULLD.head->next==head若某链表最常用的操作是在最后一个结点之后插入一个结点或者删除最后一个结点,则采用()存储方法最节省问题出现在查找效率上链表最常用的操作是在末尾插入节点和删除尾节点在尾巴插入删除操作:都需要知道他的前导而单链表要查找到最有一个元素需要遍历全部链表双链表直接可以查到前导最常用的操作实在最后一个元素之后插入一个元素和删除第一个元素删除头结点需要头指针或者只用一个-next域就能查到速度就快了p->next=head;就是把 head 所指的结点,链接到 p 所指的结点的后面(即 p 的“下一个”,指向 head)。

如果p 所指的结点正好是head 这个链表的尾结点时,通过这个语句,就把一个单向链表链接成了一个循环单链表。

p指针head指针是在外面的,并不一定放在指针域因为单链表保存的信息只有表头如果要在特定位置插入一个节点需要先从表头一路找到那个节点这个过程是O(n)的在一个长度为 n 的单链表上,设有头和尾两个指针,执行()操作与链表的长度无关。

A、删除单链表中的第一个元素有尾指针B、删除单链表中最后一个元素要倒二指针C、在单链表第一个元素前插入一个新元素尾指针D、在单链表最后一个元素后插入一个新元素有尾指针n个结点的线性表的数组实现,应指的是顺序表吧,不是静态链表顺序存储结构的优点存储密度大线性表采用顺序存储,必须占用一片连续的存储单元线性表采用链式存储,不必占用一片连续的存储单元线性表采用链式存储,便于进行插入和删除操作。

pc->next=pa?pa:pbif(pa)pc->next = pa;elsepc->next = pb;栈和队列的共同点只允许在端点处插入和删除元素一个栈的入栈序列为A B C D E 则不可能的输出序列为给解释下原因我要是明白了晕忘了给选项了抱歉1.EDCBA 2.DECBA 3.DCEAB 4.ABCDE堆栈讲究先进后出,后进先出选项1是abcde先入栈,然后依次出栈,正好是edcba选项2是abcd先依次入栈,然后d出栈,e再入栈,e出栈选项3是错误的,不可能a先出栈选项4是a入栈,然后a出栈;b再入栈,b出栈.依此类推顺序栈st(最多元素为MaxSize)为空的条件是什么当两个指针相等时,栈为空!第一个指针是指向栈的首个元素,而第二个指针是指向最后一个元素的下一个位置,所以当两个指针相等时,栈就是空的了!-> 为指向那个是指针对指向变量的操作符号,这里指针指向了结构体,而结构体内部有数据成员top,那么这个指向该结构体的指针要访问它的成员就要用->符号。

!==为不等于ST->to=0为空ST->top==m0为满ST.TOP是指原定义的变量类型,ST->TOP是指针类型的变量,指向TOP变量的首地址。

在输入、输出函数中应用不同如PRINTF("%D\N",&ST.TOP)PRINTF("%D\N",ST->TOP),不需要&号top就是栈顶指针,栈是一个只针对栈顶元素操作的数据结构,也就是说所有的操作的改变只是栈顶指针,出栈top--,入栈top++,获取栈顶元素data[top]st是参数传过来的结构体(栈),结构体中有表示该栈数据数量也就是a数组中最大的索引的t op,这句话的意思是当top等于最大可容长度度maxsize的时候,表示数组a已满,即该栈已满,否则数组a增加一个元素x,栈顶指示下标加1判定一个顺序栈st(最多元素为MaxSize)为满的条件是 D栈底是ST->top==0, 低于底就是空。

相关文档
最新文档