数据结构第三讲
FORTRAN77编程基础

第三讲FORTRAN 77 编程基础1主要内容⏹FORTRAN 77 基础⏹数据结构⏹控制结构(选择与循环)⏹基本输入输出⏹函数与子程序⏹计时函数⏹文件操作FORTRAN 基础⏹FORTRAN语言发展概况●FOR mula TRAN slation●适用于工程及科学计算的一种高级程序设计语言●1951 年由约翰•贝克斯等人开始研发●1957 年第一个FORTRAN 程序在IBM704 机上运行●1966 和1978 年先后颁布FORTRAN66 和FORTRAN77●1991 和1997 年颁布了Fortran 90和Fortran 95●2004 年公布Frotran2003 标准,面向对象程序设计●2010 年公布Fortran 2008 标准FORTRAN 编译器⏹免费的FORTRAN 编译器⏹商业版FORTRAN 编译器●GNU FORTRAN /gfortran●G95●Intel Fortran 编译器(非商业版)●Power Station 、Compaq Visual Fortran (已停止更新)●Intel Fortran●PGI Fortran●Absoft Pro Fortran●Lahey Fortran程序开发环境⏹Linux 系统⏹Windows 系统●字符界面,命令行方式●Code::Blocks + GCC●Microsoft Visual Studio + Intel Visual Fortran ●Code::Blocks + GCC一个简单的编程示例parameter(n=100)real a(n, n), b(n, n), c(n, n)cdo j = 1, ndo i = 1, na(i,j) = 1.0/(i+j‐1)b(i,j) = 1.0c(i,j) = 0.0enddoenddocdo i = 1, ndo j = 1, ndo k = 1, nc(i,j) = c(i,j) + a(i,k) * b(k,j) enddoenddoenddocprint*, "c(1,1) = ", c(1,1)stopendFORTRAN 程序分析●一个FORTRAN 源程序由一个或多个程序单元组成每个独立的程序单元以“end”语句结束●每个程序单元包括若干行(一行不能写多条语句,但一条语句可以分几行写)●每个程序单元可包含语句行和非语句行(注释行)●语句行:可执行语句和非执行语句行●非执行语句在所有可执行语句行前面●语句可以根据需要设置标号●各类语句在程序单元中的位置必须满足一定规则●程序必须按规定的格式书写源程序书写格式●每行只能在72 列内书写,并把80 列分为4 个区●1~5列:标号区(1~5 位整数)如果第1 列为“* ”或“c ”,则为注释行●第6列:续行标志区续行符可以是任意非空格/非零字符最多19 个续行●7~72 列:语句区(一行只能写一条语句)●73~:被忽略,有的编译器会报错⏹FORTRAN 77 源程序必须按规定的格式书写(Fixed Format 固定格式)⏹源程序●以.f为扩展名●纯文本文件,可使用任何文本编辑器编写⏹编译与执行g77‐O2 –o输出文件名源程序文件名./输出文件名g77 ‐O2 –o hello hello.f./hellog77常用选项-o:指定生成的可执行文件的文件名,缺省为a.out -c:只编译不链接,即只生成目标文件(.o文件)-I path:指定或增加包含文件(如*.h)的搜索路径-L path:指定(增加)库文件的搜索路径-l name:与库文件lib name.a链接-O, -O1, -O2, -O3:优化开关-g:在目标码中加入更多信息,用于程序调试●英文字母:A B C D ... ... X Y Z●下划线和阿拉伯数字:_ 0 1 2 3 4 5 6 7 8 9●特殊符号:空格= + -* / ( ) , . ' : "☞FORTRAN 不区分大小写☞早期的FORTRAN 卡片不允许小写故很多FORTRAN 程序源代码都是大写的FORTRAN 数据结构⏹F77支持基本类型和构造类型的数据结构●基本类型●构造类型:数组、记录、文件●F77 不支持指针整型、实型、双精度、复型、逻辑型、字符型正、负整数和零,缺省取值范围为:[-231, 231-1]②实型常量(Real)小数或指数形式:0.876 →8.76E-1 →87.6E-2指数部分只能是整数,取值范围:[10-38, 1038]③双精度常量(Double precision)8 字节:0.125D+45,取值范围:[10-308,10308]④复型常量(Complex)8 字节:(实数,实数)⑤逻辑型常量(Logical)⑥字符型常量(Character)⏹变量类型整型、实型、双精度、复型、逻辑型、字符型⏹变量名●第一个字符必须是字母●后面可以跟1~5 个字母、下划线或数字现在的FORTRAN 编译器允许多于6 个字符(g77 最多支持约51个字符)●变量名中的空格不起作用。
数据结构第三章习题答案解析

第三章习题1.按图3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答:⑴如进站的车厢序列为123,则可能得到的出站车厢序列是什么?⑵如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明原因。
(即写出以“S”表示进栈、以“X”表示出栈的栈操作序列)。
2.设队列中有A、B、C、D、E这5个元素,其中队首元素为A。
如果对这个队列重复执行下列4步操作:(1)输出队首元素;(2)把队首元素值插入到队尾;(3)删除队首元素;(4)再次删除队首元素。
直到队列成为空队列为止,得到输出序列:(1)A、C、E、C、C (2) A、C、E(3) A、C、E、C、C、C (4) A、C、E、C3.给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满?4.按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:A-B*C/D+E↑F5.试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1& 序列2’模式的字符序列。
其中序列1和序列2中都不含字符’&’,且序列2是序列1的逆序列。
例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。
6.假设表达式由单字母变量和双目四则运算算符构成。
试写一个算法,将一个通常书写形式且书写正确的表达式转换为逆波兰式。
7.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法。
8.要求循环队列不损失一个空间全部都能得到利用, 设置一个标志域tag , 以tag为0或1来区分头尾指针相同时的队列状态的空与满,请编写与此结构相应的入队与出队算法。
9.简述以下算法的功能(其中栈和队列的元素类型均为int):(1)void proc_1(Stack S){ int i, n, A[255];n=0;while(!EmptyStack(S)){n++; Pop(&S, &A[n]);}for(i=1; i<=n; i++)Push(&S, A[i]);}(2)void proc_2(Stack S, int e){ Stack T; int d;InitStack(&T);while(!EmptyStack(S)){ Pop(&S, &d);if (d!=e) Push( &T, d);}while(!EmptyStack(T)){ Pop(&T, &d);Push( &S, d);}}(3)void proc_3(Queue *Q){ Stack S; int d;InitStack(&S);while(!EmptyQueue(*Q)){DeleteQueue(Q, &d);Push( &S, d);}while(!EmptyStack(S)){ Pop(&S, &d);EnterQueue(Q,d)}}实习题1.回文判断。
第三讲 CompactLogix的编程介绍

第三讲 CompactLogix的编程介绍通过前一讲我们已经初步知道了如何使用RSLinx和RSLogix5000,这一讲我们将介绍CompactLogix的程序结构、编程语言、自定义数据结构、Add-on自定义指令、模拟量模块以及一些指令的使用。
一.程序结构和编程语言CompactLogix的程序结构分为任务-程序-子程序三级结构,每个CompactLogix控制器可以有多个任务,不同控制器类型的任务数是不同的,比如CompactLogix 1768系列有16个任务,而1769-L35E有8个任务。
任务是CompactLogix 的第一级程序结构,任务分成三种类型,包括连续型任务、周期型任务和事件型任务。
当控制器的CPU没有执行其它操作时,CPU执行连续型任务,连续型任务执行完毕后,又从头开始执行。
连续型任务的执行是周而复始的过程,它的执行周期是不定的优先级比周期性任务和事件型任务都低。
一个CompactLogix工程项目可以没有连续型任务,最多也只能有一个连续型任务。
用于工厂自动化的顺序控制系统通常都有连续型任务,而对于过程控制的系统,则可能没有连续型任务。
周期型任务就如它的名字一样是按照预先设定的时间间隔执行的任务。
CompactLogix控制器是个多任务的系统,但是在某一时刻只能执行一个任务。
如果某一个任务正在执行,此时另一个任务要被触发执行,这时控制器就要看看这两个任务的优先级,以决定是否中断正在执行的任务,转而去执行其它任务。
CompactLogix具有15个优先级,数值从1-15,数值小的优先级高。
优先级高的任务可以中断优先级低的任务,执行完优先级高的任务后再回头从低优先级任务中断处继续执行,连续型任务的优先级最低,它可被其它任务所中断。
第三种任务类型是事件型任务,当一个指定的触发事件发生时才去执行事件型任务。
在创建事件型任务时可以指定这种触发事件,触发事件有多种,比如有数字量信号发生变化时,运动控制执行某种操作时,消费者标签接收到数据时或是通过事件指令来触发等。
数据结构第三章栈和队列习题及答案

习题三栈和队列一单项选择题1. 在作进栈运算时,应先判别栈是否(① ),在作退栈运算时应先判别栈是否(② )。
当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③ )。
①, ②: A. 空 B. 满 C. 上溢 D. 下溢③: A. n-1 B. n C. n+1 D. n/22.若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,...,pn,若p1=3,则p2为( )。
A 可能是2B 一定是2C 可能是1D 一定是13. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?()A. 5 4 3 6 1 2B. 4 5 3 1 2 6C. 3 4 6 5 2 1D. 2 3 4 1 5 64.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4, s6, s5,s1,则栈的容量至少应该是()A.2B. 3C. 5D.65. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。
A. |top[2]-top[1]|=0B. top[1]+1=top[2]C. top[1]+top[2]=mD. top[1]=top[2]6. 执行完下列语句段后,i值为:()int f(int x){ return ((x>0) ? x* f(x-1):2);}int i ;i =f(f(1));A.2 B. 4 C. 8 D. 无限递归7. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂。
A. 3,2,4,1,1;(*^(+*-B. 3,2,8;(*^-C. 3,2,4,2,2;(*^(-D. 3,2,8;(*^(-8. 用链接方式存储的队列,在进行删除运算时()。
数据结构教案课程

2015 至2016 学年第二学期数据结构课程教案课程编码:1261D03总学时/周学时:80 / 5开课时间:2016年2 月24日第1 周至第16 周授课年级、专业、班级:15级网工程2班使用教材严蔚敏. 数据结构(C语言版)[M] 北京:清华大学出版社,2011.系别/教研室:信息工程学院/ 物联网工程授课教师:刘波教学目标:《数据结构》是物联网工程专业的一门专业必修课。
用计算机解决任何问题都需要进行数据表示和数据处理,而数据表示和数据处理正是《数据结构》要研究的内容。
主要介绍如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法的分析和评价。
通过本课程教学,使学生了解数据结构的基本概念,理解数据结构的逻辑结构和物理结构的基本概念以及有关算法,掌握算法描述及算法的评价标准,熟悉在不同存储结构上实现不同的运算,并对算法设计的方式和技巧有所体会,旨在培养学生基本的、良好的程序设计技能,编制高效可靠的程序,并为学生日后学习操作系统和数据库等后续课程奠定基础。
教学要求:本课程主要是以抽象数据类型的观点来组织和讲解线性表、栈、队列、树、二叉树、图等各种主要的数学模型并定义为相应的抽象数据类型,给出各种物理表示法和有关算法,关于数据处理技术介绍几种主要的排序和查找算法。
学生通过学习该课程后主要应掌握以下内容:1.了解数据结构及有关的基本概念;2.了解各种抽象数据类型的性质;3.掌握各种抽象数据类型的实现和基本算法;4.对算法的时间和空间复杂性有一定的分析能力;5.能够选择适当的数据结构和存储结构以及设计有效的算法,解决实际问题;6.掌握数据结构在排序和查找等常用算法中的应用。
教学重点:抽象数据类型、顺序表、单链表、循环链表、栈、队列、数组、特殊矩阵、树和二叉树、最小生成树、拓扑排序、查找、内部排序教学难点:单链表、栈、循环队列、特殊矩阵、二叉树、关键路径、最短路径教学方法与手段:1.理论部分以讲授法为主,结合讨论及课堂练习实现教学目的。
数据结构教学设计教案

数据结构教学设计教案教学设计教案:数据结构一、教学目标通过本教案的教学,学生应能够:1. 理解数据结构的基本概念和原理;2. 掌握常见的数据结构及其操作方法;3. 能够运用所学的数据结构解决实际问题。
二、教学重点1. 数据结构的基本概念和原理;2. 常见的数据结构及其操作方法。
三、教学难点1. 复杂数据结构的理解和应用;2. 数据结构的算法分析和性能评估。
四、教学方法1. 讲授结合实例分析法:通过具体的案例和实例,引导学生理解数据结构的基本概念和原理;2. 课堂讨论法:通过讨论和交流,培养学生的思维能力和问题解决能力;3. 实践操作法:通过编写程序和实际操作,巩固和应用所学的数据结构知识。
五、教学内容及进度安排第一讲:数据结构的基本概念和原理(2学时)1. 数据结构的定义和分类;2. 抽象数据类型(ADT)的概念和特点;3. 算法的基本概念和性能评估。
第二讲:线性表(4学时)1. 线性表的定义和基本操作;2. 顺序表和链表的实现及其优缺点;3. 线性表的应用实例。
第三讲:栈和队列(4学时)1. 栈的定义和基本操作;2. 栈的应用实例;3. 队列的定义和基本操作;4. 队列的应用实例。
第四讲:树和二叉树(4学时)1. 树的定义和基本概念;2. 二叉树的定义和基本操作;3. 二叉树的遍历方法;4. 树和二叉树的应用实例。
第五讲:图(4学时)1. 图的定义和基本概念;2. 图的存储结构和基本操作;3. 图的遍历方法;4. 图的应用实例。
第六讲:排序和查找(4学时)1. 常见的排序算法及其原理和性能评估;2. 常见的查找算法及其原理和性能评估;3. 排序和查找的应用实例。
六、教学评价1. 课堂表现评价:包括学生的参预度、思维活跃度、问题解决能力等;2. 作业评价:通过布置编程作业、理论题等,评估学生对所学知识的掌握程度;3. 考试评价:通过期末考试,检验学生对数据结构的理解和应用能力。
七、教学资源1. 教材:《数据结构与算法分析》;2. 课件:包括教学PPT、案例分析等;3. 编程软件:如C/C++编译器、Java开辟环境等。
数据结构教案C语言版

课程教案课程名称:数据结构授课教师:学习对象:任课时间:一、学生情况分析数据结构是计算机专业的一门核心专业课程。
学生在前期的学习中已经学习了C语言程序设计课程。
通过本课程学习使学生对提高编写程序的能力以及解决实际问题的能力。
二、课程教学目标《数据结构》是计算机学科中一门核心专业基础课。
主要介绍如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法的分析和评价。
通过本课程的学习,使学生深透地理解数据结构的逻辑结构和物理结构的基本概念以及有关算法,培养基本的、良好的程序设计技能,编制高效可靠的程序,为学习操作系统、编译原理和数据库等课程奠定基础。
三、课程教学内容第一章绪论教学内容:1)什么是数据结构2)抽象数据类型概念;数据类型;数据抽象与抽象数据类型;用于描述数据结构的语言3)数据结构的抽象层次4)算法定义5)性能分析与度量;算法的性能标准;算法的后期测试;算法的事前估计;空间复杂度度量;时间复杂度度量;时间复杂度的渐进表示法;教学要求:了解:数据结构基本概念及数据结构的抽象层次了解:抽象数据类型概念了解:算法的定义及算法特性掌握:算法的性能分析与度量方法第二章线性表教学内容:1)线性表的定义和特点2)线性表的顺序存储及查找、插入和删除操作3)线性表的链式存储及查找、插入和删除操作4)使用线性表的实例教学要求:了解:线性表的定义和特点熟练掌握:线性表的顺序存储结构的查找、插入和删除等基本操作熟练掌握:单链表、循环链表及双向链表的定义及实现掌握:熟练掌握单链表的应用方法第三章栈和队列教学内容:1)栈:栈的抽象数据类型;栈的顺序存储表示;栈的链式存储表示2)队列:队列的抽象数据类型;队列的顺序存储表示;队列的链式存储表示3)队列的应用举例教学要求:熟练掌握:栈的定义及实现熟练掌握:队列的定义及实现掌握:能运用栈和队列解决简单实际问题教学:内容:1)字符串的抽象数据类型2)字符串操作的实现3)字符串的模式匹配教学要求:熟练掌握:字符串的定义方式熟练掌握:字符串的各种操作的实现了解:字符串的模式匹配算法第五章数组和广义表教学:内容:1)数组的定义和初始化2)作为抽象数据类型的数组的顺序存储方式教学要求:了解:作为抽象数据类型的数组的定义熟练掌握:顺序表的数组定义方式及实现第六章树和二叉树教学内容:1)树和森林的概念:树的定义;树的术语;树的抽象数据类型;森林的概念2)二叉树:二叉树的定义;二叉树的性质;二叉树的抽象数据类型3)二叉树的表示:数组表示;链表存储表示4)二叉树的遍历:中序遍历;前序遍历;后序遍历;应用二叉树遍历的实例;二叉树的中序非递归算法5)线索化二叉树:线索;中序线索化二叉树;前序与后序的线索化6)树与森林:树的存储表示;森林与二叉树的转换;树的遍历;森林的遍历7)二叉树的计数8)霍夫曼树:路径长度;霍夫曼树;霍夫曼树编码教学要求:了解:树和森林的概念掌握:二叉树的概念、性质及二叉树的表示熟练掌握:二叉树的遍历方法掌握:线索化二叉树的特性及寻找某结点的前驱和后继的方法掌握:树和森林的实现及遍历方法掌握:二叉树的计数方法及从二叉树遍历结果得到二叉树的方法掌握:霍夫曼树的实现方法及霍夫曼编码的概念第七章图教学内容:1)图的基本概念:图的基本概念;图的抽象数据类型2)图的存储表示:邻接矩阵;邻接表;邻接多重表3)图的遍历与连通性;深度优先搜索;广度优先搜索;连通分量4)最小生成树:克鲁斯卡尔算法;普里姆算法教学要求:掌握:图的基本概念和图的存储表示熟练掌握:图的两种遍历方法与求解连通性问题的方法掌握:构造最小生成树的Prim和Kruskal方法教学内容:1)静态查找表:顺序表的查找;有序表的查找;索引顺序表的查找2)二叉排序树:二叉排序树上的搜索、插入和删除教学要求:熟练掌握:静态搜索表的顺序搜索和折半搜索方法熟练掌握:二叉搜索树的表示、搜索、插入、删除算法及其性能分析方法第十章内部排序教学内容:1)概述2)插入排序:直接插入排序;对分插入排序;链表插入排序;希尔排序3)选择排序:直接选择排序;堆排序教学要求:掌握:排序的基本概念和性能分析方法掌握:插入排序、选择排序、等内排序的方法及性能分析方法单元名称:第一讲:绪论一、教学目标1.了解《数据结构》课程的体系结构2.掌握本章介绍的各种基本概念和术语3.了解数据结构的二元组表示4.掌握逻辑结构与物理结构之间的映像关系。
数据结构 -第12周查找第3讲-二叉排序树.pdf

以二叉树或树作为表的组织形式,称为树表,它是一类动态查找表,不仅适合于数据查找,也适合于表插入和删除操作。
常见的树表:二叉排序树平衡二叉树B-树B+树9.3.1 二叉排序树二叉排序树(简称BST)又称二叉查找(搜索)树,其定义为:二叉排序树或者是空树,或者是满足如下性质(BST性质)的二叉树:❶若它的左子树非空,则左子树上所有节点值(指关键字值)均小于根节点值;❷若它的右子树非空,则右子树上所有节点值均大于根节点值;❸左、右子树本身又各是一棵二叉排序树。
注意:二叉排序树中没有相同关键字的节点。
二叉树结构满足BST性质:节点值约束二叉排序树503080209010854035252388例如:是二叉排序树。
66不试一试二叉排序树的中序遍历序列有什么特点?二叉排序树的节点类型如下:typedef struct node{KeyType key;//关键字项InfoType data;//其他数据域struct node*lchild,*rchild;//左右孩子指针}BSTNode;二叉排序树可看做是一个有序表,所以在二叉排序树上进行查找,和二分查找类似,也是一个逐步缩小查找范围的过程。
1、二叉排序树上的查找Nk< bt->keybtk> bt->key 每一层只和一个节点进行关键字比较!∧∧p查找到p所指节点若k<p->data,并且p->lchild=NULL,查找失败。
若k>p->data,并且p->rchild=NULL,查找失败。
查找失败的情况加上外部节点一个外部节点对应某内部节点的一个NULL指针递归查找算法SearchBST()如下(在二叉排序树bt上查找关键字为k的记录,成功时返回该节点指针,否则返回NULL):BSTNode*SearchBST(BSTNode*bt,KeyType k){if(bt==NULL||bt->key==k)//递归出口return bt;if(k<bt->key)return SearchBST(bt->lchild,k);//在左子树中递归查找elsereturn SearchBST(bt->rchild,k);//在右子树中递归查找}在二叉排序树中插入一个关键字为k的新节点,要保证插入后仍满足BST性质。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
p->prior->next=s;
p->prior=s;
二.双向链表的删除
删除带有头结点的非空双向循环链表 中第一个数据域的内容为x 的链结点. 中第一个数据域的内容为x 的链结点.
list
…
需要做的工作: 需要做的工作:
找到满足条件的结点; 1. 找到满足条件的结点; 若找到,删除(并释放)满足条件的结点. 2. 若找到,删除(并释放)满足条件的结点.
注:1,数组的一个分量表示一个结点,游标(cur)代表指针指示结点在数组中的相 对位置. 2,数组的第零分量可看成头结点,其指针域指示指示链表的第一个结点. 3,这种结构需要预先分配一个较大的空间,在做线性表的插入和删除操作时不需要 移动元素,仅需要修改指针,故仍具有链式存储结构的主要优点
选择题
A ) 1.下述哪一条是顺序存储结构的优点?( A.存储密度大 B.插入运算方便 C.删除运算方便 D.可方便地用于各种逻辑 结构的存储表示 错误的是哪一个?( B ) 2.下面关于线性表的叙述中,错误 错误 A.线性表采用顺序存储,必须占用一片连续的存储单元. B.线性表采用顺序存储,便于进行插入和删除操作. C.线性表采用链接存储,不必占用一片连续的存储单元. D.线性表采用链接存储,便于插入和删除操作. 3.线性表是具有n个( C )的有限序列(n>0). A.表元素 B.字符 C.数据元素 D.数据项 E.信息项 4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运 算,则利用( A )存储方式最节省时间. A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表 5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素, D 则采用( )存储方式最节省运算时间. A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针 的单循环链表
5.主要是使插入和删除等操作统一,在第一个元素之前插入元素和删除第一 个结点不必另作判断.另外,不论链表是否为空,链表指针不变. 6.O(1),O(n) 7.单链表,多重链表,(动态)链表,静态链表 8.f->next=p->next; f->prior=p; p->next->prior=f; p->next=f;
2.对于头指针为Head带头结点的单链表,判断该表为空 的条件( C ). A. Head= =null, B. Head->next= =Head, C. Head->next= =null D. Head !=null
注:有的时候为了某个常操作的方便,在 循环链表中设立尾指针而不设头指针,如 下图,
判断题部分答案解释 1, 头结点并不"仅起"标识作用,并且使操作统一.另外, 头结点数据域可写入链表长度,或作监视哨. 4.两种存储结构各有优缺点,应根据实际情况选用,不能笼 统说哪一个好. 7.集合中元素无逻辑关系. 9.非空线性表第一个元素无前驱,最后一个元素无后继. 13.线性表是逻辑结构,可以顺序存储,也可链式存储.
答案:12.B13.C14.C15.C 16.A
答案:18,A 19,D 22,D 24,B 25,B
答案:26,A 27,D 1. ×2.√3. √4.×
答案:7. ×8.×9.×10.×11.×12.×13. ×14. √15.×16. √
1.顺序 2.(n-1)/2 3.py->next=px->next; px->next=py 4 .n-i+1
prior data next
其中, 其中,data 为数据域 prior ,next 分别为指向该结点的直接前驱结 点与直接后继结点的指针域
双向链表的几种形式
L
… 无头结点的双向链表
L
^
… 无头结点的双向循环链表
L
… 带头结点的双向循环链表
二.双向链表的插入
在带有头结点的非空双向循环链表中第 一个数据域的内容为a的链结点右边插入一 个数据信息为x的新结点 的新结点. 个数据信息为 的新结点.
删除b以前
删除b以后
删除时的主要操作 p->next= p->next ->next; 注:在已知链表中元素插入或删除的确切位置的情 况下,在单链表中插入和删除一个结点时,仅需要 修改指针而不需要移动元素. 具体算法实现见课本P29
循环链表
循环链表 是指链表中最后那个链结点
的指针域存放指向链表最前面那个结点的指针 整个链表形成一个环. ,整个链表形成一个环.
第三讲
一,单链表的插入与删除; 二,双链表的插入与删除; 三,循环链表和静态链表简介; 四,典型例题
在单链表中,取得第i个数据元素必须从头指针出发寻找,因此 单链表是非随机存取的存储结构 在单链表中如何实现插入和删除操作?
实现的主要操作如下: s->next=p->next; p->next=s;
删 除 前
list
…
删 除
p
…
x
…
删 除 后
list
…
…
主要操作: 主要操作:
e=p->data; p->prior->next=p->next; p->next->prior; free(p) 详细的算法见课本P37,算法2.19
静态链表 用一维数组来描述线性链表,其类型说明如下: //------------------------------线性链表的静态单链表存储结构 #define MAXSIZE 1000 typedef ElemType Int } Component, SLinkList[MAXSIZE] cur; struct { data; //链表的最大长度
11. 线性表的表元存储方式有((1))和链接两种.试指出下列各表中使用的是何种存储 方式:表1是((2))存储方式;表2是((3))存储方式;表3是((4))存储方式;表4 是((5))存储方式.表左的 指向起始表元 表左的s指向起始表元 表左的 指向起始表元.
供选择的答案: A.连续 B.单向链接 C.双向链接 D.不连接 E.循环链接 F.树状 G.网状 H.随机 I.顺序 J.顺序循环 答案:11. 1, I.2, I .3, E 4,B. 5,C
L
…
需要做的工作: 需要做的工作:
找到满足条件的结点; 1. 找到满足条件的结点; 若找到,申请一个新的链结点; 2. 若找到,申请一个新的链结点; 3. 将新结点插到满足条件的结点后面. 将新结点插到满足条件的结点后面.
插 入 前
L
…
插 入
p
…
a
e
b
…
s
插 lis
a
…
主要操作如下: 主要操作如下: s->data=e; s->prior=p->prior;
�
例如:见课本P35,实现两个线性表的合并时 ,仅需要将一个表的表尾和另一个表的表头 相接.
双向链表及其操作
1. 双向链表的构造 2.双向链表的插入与删除 2.双向链表的插入与删除
一.双向链表的构造
所谓双向链表是指链表的每一个结点中除了数 据域以外设置两个指针域, 据域以外设置两个指针域,其中之一指向结点的直 接前驱结点,另外一个指向结点的直接后继结点. 接前驱结点,另外一个指向结点的直接后继结点. 链结点的实际构造可以形象地描述如下: 链结点的实际构造可以形象地描述如下:
6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( D )最 节省时间. A. 单链表 B.单循环链表 C. 带尾指针的单循环链表 D.带头结点的双循环链 表 7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个 结点.则采用( D )存储方式最节省运算时间. A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表 8. 静态链表中指针表示的是( C ). A. 内存地址 B.数组下标 C.下一元素地址 D.左,右孩子地址 9. 链表不具有 不具有的特点是( B ) 不具有 A.插入,删除不需要移动元素 B.可随机访问任一元素 C.不必事先估计存储空间 D.所需空间与线性长度成正比 10. 下面的叙述不正确 不正确的是( B,C ) 不正确 A.线性表在链式存储时,查找第i个元素的时间同i的值成正比 B. 线性表在链式存储时,查找第i个元素的时间同i的值无关 C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比 D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关
线性链表
H …
循环链表
H …
头结点
带有头结点的循环链表
H …
注:从表中任一个结点出发均可找到表中其他结点
1. 对于以Head为头结点的单循环链表中,q指针指向链 尾的条件是( B ). A.q->next= =null, C. q->next->next= =Head B.q->next= =Head, D. q->data=-1.