热点链接

香港白小姐一肖中特

主页 > 香港白小姐一肖中特 >
数据1_百度文库168面大型免费印刷图库
时间: 2019-12-25

  道堂演习 一 1.1 判断题 在全部人认为切确的题后的括号中打√,否则打 X)。 . 判断题(在谁感到精准的题后的括号中打 在我们感到无误的题后的括号中打√ 。 (1)设施与算法没有区别。 ( ) (2)法子联想框图就是一种图形化的算法。 ( ) (3)采取手段着想语言编写的办法也是算法。 ( ) (4)一个算法或者没有输入,但不能没有输出。 ( ) (5)顺次存在机关经由数据元素的所在直接呼应数据元素间的逻辑合连。 ( ) (6)链式保存组织经过指针间接地反应数据元素之间的逻辑干系。 ( ) (7)数据的存在机关平时唯有挨次留存机合与链式保全机合两种。 ( ) (8)具有雷同逻辑构造的数据恐怕采取分歧的保存构造。 ( ) (9)逻辑机合不相似的数据该当采纳不同的留存组织。 ( ) (10)算法申明的前提是算法的时空作用高, ( ) 1.2 填空题。 . 填空题。 (1)“数据组织”课程磋商的急急内容搜求——、——和——三个方面。 (2)寻常景象下,算法独立于仔细的——,与细致的步骤设想谈话——。 (3)一个周备的算法该当具有——、——、——、——和——五个性质。 (4)数据的逻辑构造不妨分为——和——两大类。 (5)除了顺次存在构造与链式留存机合之外,数据的留存机关平时尚有——和散列结构。 (6)数据的逻辑机合是指——,而存在构造是指——。 (7)逻辑上相邻的数据元素在物理住址上也相邻是——生存构造的特质之一。 (8)为了竣工随机探访,线性结构应该选用——保留组织。 (9)链式保留机闭的首要好处是——。 (10)算法证据是指———二,首要从——和——这两个方面对算法举办注释。 1.3 平居谈数据组织是一个二元组 ,R),此中 D,R 分别代表什么 通常谈数据组织是一个二元组(D, , . , 告别代表什么? 1.4 何谓数据的逻辑机关 何谓数据的保留结构 两者有何商酌 何谓数据的逻辑机关?何谓数据的保全结构 两者有何磋议? 何谓数据的存在构造?两者有何磋商 . 历年试题 一 1.在数据构造中,数据的逻辑机合不妨分成( ) A.内中结构和外部构造 B.线性机关和非线性构造 C.紧凑机关和非紧揍结构 D.动静组织和静态组织 2.下列叙法精确的是( ) A.数据是数据元素的基础单位 B.数据元素是数据项中不成离散的最小记号单位 C.数据可由几多个数据元素构成 D.数据项可由几许个数据元素构成 3.数据构造的根蒂任务是( ) A.逻辑构造和留存构造的设想 B.数据构造的运算实行 C.数据结构的评价与选择 D.数据构造的遐想与完毕 4.在一个具有 n 个结点的有序单链表中插入一个新结点,并使插入后已经有序,则该驾驭的时 间混合性量级为( ) A.O(1) B.O(n) C.O(nlog2n) D.O(n2) 5.若结点的保管地点与其枢纽字之间糊口某种照射干系,则称这种留存机闭为( ) A.递次留存构造 B.链式保存结构 C.索引存在组织 D.散列生存组织 6、选出精确的表述 (1)挨次存在样子只能用于留存线)依序保管格局的利益是存在密度大, 且插入、省略操纵算效率高。 (3)链表的每个结点中都恰巧包含一个指针。 (4)散列法生存的底子念想是由枢纽码的值决断数据的保存地方。 (5)散列表的结点中只蕴含数据元素自身的音信, 不蕴含任何指针。 (6)负载因子 (装填因子) 是散列法的一个殷切参数, 它反应散列表的装满水准。 (7)栈和队伍的保管格式既不过挨次花式, 也不外链接花式。 (8)用二叉链表法 (llink -- rlink法) 留存蕴含n 个结点的二叉树, 结点的2n个指针区 域中有n+1 个为空指针。 (9)用相邻矩阵法保全一个图时, 在不研讨萎缩生存的景况下, 所占用的保全空间大小只 与图中结点个数有合, 而与图的边数无合。 (10)毗连表法只能用于有向图的存储,而相邻矩阵法对于有向图和无向图的保全都关用。 7. 透露逻辑相干的生存组织或许有四种形式, 即顺序保存式子、 链式保全花式、 _______________ 和散列保管格式。 8.下列门径段的功夫驳杂度为________________。 product = 1; for (i = n;i0; i--) for (j = i+1; jn; j++) product *=j; 9.文件上的两类吃紧操看成________________和________________。 10.文件的根基运算收罗______________和窜改两类。 11.下列手段段的岁月搀和性量级是_____________。 for (i=1;in; i++) for (j=1; ji; j++) t=t+1; 12.若一个算法中的语句频度之和为 T(n)=3720n+4nlogn,则算法的时间搀杂度为________。 第二章 课后纯熟 1 表中数据元素按值的大小非递减排 例 2. 已知长度为 n 的非空线性表 A 采取按序保留结构, . 列,请写出省略该线性表中值近似的有余元素的算法。 算法想思对照纯正,只需从表的第一个数据元素早先到末尾谁人数据元素,屡屡做以下动 作:比照相邻的两个数据元素是否宛如,若一致,则减少其中一个;若不犹如,则比较下一对 相邻元素。算法如下: voidDELETEITEM1(ElemTypeA[],ihth)) { int j,i:0; while(in—1) if(A[i]!=A[i+1]) /x 若相邻两个元素不相同。/ i++; else{ /*若相邻两个元素近似,则节略此中一个*/ for(j=i++;in;j++) A[j-]=A[j]; n--; /x 表长减 1 x/ } } } 上述算法的时刻夹杂度为 O(n2)。对算法进行更始,获得一个光阴混合度为 O(n)的 算法不是很困穷。这里,筑立两个整型变量 i 与 k,它们的初值告别为 1 与 0。若在比较 进程中创制 A[i]与 A[k]不同,则先将 k 后移一个位置,尔后将 A[i]送到 A[k]的地方上; 若 A[i]与 A[k]相同,可是将 i 后移一个场所。当表中全盘元素都处分杀青时,k+1 恰巧 是节略多余元素此后线性表的长度。 更始后的算法如下: voidDELETEITEM2(ElemTypeA[],int &n) { int k,i; if(n1)1 k=0; for(i=1;in;i++) if(A[i]!=A[k]) /x 若 A[i]与 A[k]不彷佛时。/ A[++k]=A[i]; n=k+1; /。得到减省此后的表长。/ } } 14.将两个按值有序的非空线性链表兼并为一个按值有序的线性链表 . 设 lista 与 listb 别离为两个有序链表第一个链结点的指针。将这两个有序链表合并 为一个有序链表,其第一个链结点的指针为 listc。 这里,只需建立三个指针 p,q 和 r,其中,p 和 q 告别指向链表 lista 和链表 listb 暂时待 比较插入的链结点,而 r 指向链表 listc 中如今末端那个链结点。尔后接连地对比 p 与 q 所指的链结点的数据域值,若 p-data q-data,则将 p 指的链结点链接到 r 所指的链 结点之后,否则将 q 指的链结点链接到 r 所指的链结点之后。当个中一个链表为空时,只 需将另一个链表中残存的链结点都顺次链接到 r 所指的链结点之后即可。初始时,让 listc 指向 lista 和 listb 所指向的链结点中值小的那一个链结点。 LinkListMERGELIST(LinkListlista,LinkListlistb) { LinkList listc,p,q,r; if(lista-dada=listb-data){ listc=lista; r=lista; p=lista-link; 1 else{ listc=listb; r=listb; q=listb-link; } /x listc 指向 lista 和 listb 所指结点中值小者 x/ while(p!=NULL&&q!=NULL)1 if(p-data:q-data){/x 若此刻 p 所指结点的值不大于 q 所指结点的值 x/ r-link=p; /y 将 p 所指结点链接到 r 所指结点之后 x/ r=p; p=p-link; } else{ r-link:q; /。将 q 所指结点链接到 r 所指结点之后‘/ r=q; q=q—link; [ [ r-link=p?p:q; /x 插人剩余链结点 x/ return(listc); /x 返回合并后的链表第一个链结点地点 x/ } 若两个链表的长度分手为 n 与 m,则上述算法的光阴搀杂度为 O(n 十 m)。在兼并两 个链表为一个链表时不必要此外建造新链表的链结点空间,只需将给定的两个链表中的 链结点之间的链接相合废除,重新听命元素值的非递减关连将一共链结点链接成为一个 链表即可。 例 2.5 约瑟夫(Josephu)题目 已知 n 私家(或者以编号 1,2,3,…,n 分手吐露)围坐 . 在一张圆桌范围。从编号为 k 的人开初报数,数到 m 的谁人人出列,大家的下一小我又从 1 最先 报数,数到 m 的那个人又出列,依此律例一再下去,直到圆桌范围的人全数出歹,J。 比方,当 n:8,m’4,k 二 3 时,出列的挨次递次为 6,2,7,4,3,5,1,8。 办理约瑟夫标题不妨愚弄多种数据构造, 但比较清白和自然的本事是欺骗一个具有 n 个链 结点、且不带头结点的循环链表。将圆桌界限的每一私人对应着该链表中的一个链结点,某个 人出列相当于从链表中省略一个链结点。下面的算法便是在该循环链表中络续地报数,络续地 减少一个链结点,直到循环链表中还剩一个链结点时嬉戏完工。一共算法或者分为三个个人: (1)建设一个具有 n 个链结点且无头结点的循环链表; (2)决策第一个报数点的地址; (3)络续地从链表中减省一个链结点,直至链表中又有一个链结点。 voidJOSEPHUS(intn,int,m,intk) LinkListp,r,listxNULL; int i; for(i;1;i:n;i++){ p’(LinkList)malloc(sizeof(LNode)) p—data:i; if(1ist; ;NULL) list’p; else r—link r=p; p-link:list; p=list; for(i=1;ik;i++) r=p; p=p-link; while(p-link!=p){ for(i=1;im;i++) r=p; p=p-link; r-link=p-link; printf(%4d,p-data); free(p); p=r-link;/x 申请一个 新的链结点。//x 寄放第 i 个结点的编号。//x 至此,兴办一个循环链表 x//x 此时 p 指 向第一个动身结点。/ P 指向第 m 个结点,r 指向第 m—/。节流第 m 个结点,//x 输出一 个结点编号 x//x 释放被俭朴结点的空间 x//* p 指向新的启航结点 x/ 1 个结点 x/ } printf(最后被省略的节点是:%4d\n,p-data); } 在我们以为准确的题后的括号中打√ 习 题 2.1 判断题 在你们感应精准的题后的括号中打√,否则打 X)。 . 占定题(在全部人感应正确的题后的括号中打 。 (1)空线性表的特点是表中数据元素都未赋值。 ( ) (2)线性表的顺序保全组织务必占用一片地方连续的保留单元。 ( ) (3)用一维数组留存线性表时,表中第 i 个元素寄放在下标为 i 的数组元素中。 (4)采用按次生存机关的线性表又称为按序表。 ( ) (5)—个数据元素的所在是指该元素占用的多少存储单元的第一个单元的地方。 (6)线性表占用的留存单元的数量与表中数据元素的榜样有闭。 ( ) (7)线性表的顺次保全组织要比链式留存构造俭约保存空间。 ( ) (8)线性表的链式保留组织要比挨次保留结构节省保管空间。 ( ) ( ( ) ) (9)若线性表采纳挨次存储组织』Ij 线性表的长度等于表中元素的个数与每个元素所占内存 单元之乘积。 ( ) (10)若线性表选用按序保全结构,每个数据元素占用 4 个生存单元,第 12 个数据元素的存 储所在为 144 则第 1 个数据元素的保留地点是 101。 ( ) (11)在长度为 n 的依序表的第 i 个地址插入一个数据元素,的关法值为 1≤i≤N。 ( i ) (12)减削长度为 n 的顺序表的第 i 个数据元素,i 的合法值为 1≤i≤n。 ( ) (13)在长度为 n 的挨次表中插入一个数据元素的时刻搀和度为 O(n)。 ( ) (14)线性表的链式存储机合无须占用地址接续的留存空间。 ( ) (15)链表中的每个链结点占用的保留空间不必相连。 ( ) (16)一个链结点的地方是指该链结点占用的若干存在单元的第一个单元的地方。 ( ) (17)非空线性链表的末尾谁人链结点的指针域不能为空,理应寄存 NULL。 ( ) (18)所谓空链表是指没有任何链结点的链表。 ( ) (19)任何一个链表都也许依据需要建树一个头结点。 ( ) (20)每个链表的前面都必需修设一个头结点。 ( ) (21)线性链表(单向链表)中的每个链结点惟有后继结点,没有前驱结点。 ( ) (22)一个空的链表不占用任何存在空间。 ( ) (23)若指针变量 list 指向一个空链表,则 list 中什么也没有。 ( ) (24)非论出目前算法的什么地方,符号 p-data 暗示的原理都好像。 ( ) (25)在算法中,标识 p-link 流露 p 所指的下一个链结点的地方。 ( ) (26)节约非空线性链表的第一个链结点只需推行语句 list=list-link。 ( ) (27)循环链表的着末那个链结点的指针域中存放着链表最前面那个结点的地点。 ( ) (28)制造一个指针变量,它能够遍历完全循环链表。 ( ) (29)双向链表的头结点指针要比线性链表的头结点指针占用更多的保全空间。 ( ) (30)在链结点数目似乎的条目下,双向链表占用的空间是线 倍。 ( ) 单项遴选题。 单项选择题。 (1)一个递次表所占用的生存空间大小与——无关。 A.表的长度 B.元素的寄放依次 C.元素的类型 D。元素中各字段的典型 (2)设保全分派是从低所在到高地方举行的。若每个元素占用 4 个保留单元,则某元素的地 址是指它所占用的单元的 A.第 1 个单元的地方 B.第 2 个单元的地点 C.第 3 个单元的地址 n 第 4 个单元的地方 (3)若线性表选用顺序保管机关,每个元素占用 4 个保全单元,第 1 个元素的存储地方为 100, 则第 12 个元素的留存地址是. 。 A.112 B.144 C.148 0.412 (4)若长度为 n 的线性表采用按序存在结构, 在表的第 i 个所在插入一个数据元素, 的合法值 i 应当是——。 A.iO B.i≤n C.1≤i≤n D.1≤i≤n+1 (5)若长度为 n 的非空线性表接纳依次留存结构, 俭朴表的第 i 个数据元素, 的合法值应该是 i A.iO B.i≤n C.1≤i≤n D。1≤i≤n 十 1 (6)若长度为 n 的非空线性表选取递次存储组织,减少表的第 i 个数据元素,开初须要搬动表 中——个数据元素。 A.n-i B.n+i C.n-i+l D.n-i-1 (7)若长度为 n 的线性表选取递次生存结构,在表的第 i 个所在插入一个数据元素,须要移动 表中——个元素。 。 A.i B.n+i C.n-i+l D.n-i-1 (8)若屡次地对线性表实行插入和删除掌握,该线性表该当采取——存在组织。 A.散列 B.按次 C.链式 D.索引 (9)链表中所占用的保管单元地点必定是 。 A.无序的 B.不断的 C.不连续的 D.局部连接的 (10)链表中的每一个链结点所占用的生存单元——。 A.不用络续 B.必定延续 C.个体衔接 D.连结与否无所谓 (11)与单链表相比,双向链表的便宜之一是 。 A.插入、删除支配更简单 B.不妨实行随机探访 C.大概减少头结点指针 D.按次拜访相邻结点更生动 (12)若 list 是某带动结点的循环链表的头结点指针,则该链表末尾阿谁链结点的指针域中存 放的是——。 A.1ist 的地方 B.1ist 的内容 C.1ist 指的链结点的值 D.链表第一个链结点的地址 (13)若 list 是某带动结点的循环链表的头结点指针,当 p(p 与 list 同类型)指向链表的末尾那 个链结点时,——。 A.该结点的指针域为空 B.p 为空 C.p 的内容与头结点的内容相似 D.该链结点指针域内容与 list 的内容相同 (14)若 listl 和 list2 折柳为一个单链表与一个双向链表的第一个结点的指针,则——。 A.1ist2 比 listl 占用更多的保管单元 B.1istl 与 list2 占用相仿的保全单元 C.1istl 和 list2 应当是好似榜样的指针变量 D.双向链表比单链表占用更多的保管单元 (15)在表白式中,象征 p-link 表现——。 A.p 所指的链结点的指针域(位置) B.p 所指的链结点的指针域的内容 C.p 所指的链结点的下一个链结点的地址 D.p 所指的链结点的下一个链结点的所在(出今朝剖明式中) (16)在一个具有 n 个链结点的线性链表中搜求某一个链结点,若搜寻得胜,需要平衡比照 ——个链结点。 A.n B.n/2 C.(n+1)/2 D.(n-1)/Q (17)从一个具有 n 个链结点的有序线性链表(即链结点遵循数据域值有序链接)中插入一个 新的链结点,况且依然庇护链表有序的光阴搀杂度为——。 A.O(1) B.O(n) C.O( n(2) ) D.O( log2(n) ) (18)给定具有 n 个元素的挨次表,建设一个有序线性链表的岁月同化度为——。 A.O(1) B.O(n) C.O( n(2) ) D.O( log2(n) ) (19)在非空线性链表中由 p 所指的链结点反目插入一个由 q 所指的链结点的经过是顺次执 行——。 A.q-link=p;p-link=q; B.q-link=p-link;p-link=q; C.q-link=p-link;p=q; D.p-link=q;q-link=p; (20)若节省非空线性链表中由 p 所指的链结点的直接后继链结点的过程是按序执行 ________. A.r=p-link;p-link=r;free(r); B.r=p-link;p-link=r-link;free(r); C.r=p-link;p-link=r-link;free(p); D.p-link=p-link-link;free(p); (21)在非空双向循环链表中由 q 所指的链结点背面插入一个由 p 所指的链结点的步履顺序 为:p-llink=Q;p-rlink=q-rlink;q-rlink=p;——。(空白处为一条赋值 语句) A.q-llink=p B.q-rlink-llink=p C.p-fiink-llink=p D.p-llink-llink=p (22)在非空双向循环链表中由 q 所指的阿谁链结点前面插入一个 p 所指的链结点的动干扰 应的语句按次为:p-rlink=Q;p-llink=q-llink;q-[1ink=p;——。(空白 处为一条赋值语句) A.q-rlink=p; B.q-llink-rlink=p; C.p-rlink-rlink=p; D.p-llink-rlink=p; (23)在包含有 1000 个数据元素的线性表中实现如下四个左右,所必要的推行光阴最长的是 一O A.线性表选用递次保存构造,在第 10 个元素后面插入一个新的元素 B.线性表采取链式生存机关,在第 10 个元素不和插入一个新的元素 C.线性表选用依次生存组织,节省第 990 个元素 D.线性表接纳链式保存组织,减削 p 所指的链结点 2.3 填空题。 . 填空题。 (1)递次表是一种——线)在门径着想中,描述线性表的顺序保管结构平日都用——。 (3)在——景况下,俭朴线性表中一个数据元素均衡要移动表中近一半的元素。 (4)在顺次表的——插入一个新的数据元素不用转移任何元素。 (5)若长度为 n 的线性表采取依序存储机合,在其第 i 个地址(1≤i≤n+1)插入一个新的数据 元素,当不溢出时,开始——,然后——,末尾——。 (6)若长度为 n 的线性表选取挨次生存构造,减少其第 i 个元素(1≤i≤n),起初——,然 后——。 (7)若长度为 n 的线性表采取递次保全结构,插入或减少一个元素的期间混杂度为——。 (8)若某线性表选用依序存在构造,每个元素占 4 个保全单元,首地点为 100,则第 12 个元 素 的保留地址为——。 (9)线性表的链式存储组织严沉搜求——、——和——三种式样。 (10)线性表的递次生存构造是过程——来直接反响数据元素之间的逻辑合连,而链式存 储构造则是经历——间接响应数据元素之间的逻辑合连。 (11)凭据——的若干,也许将链表分为线性链表(单链表)与双向链表。 (12)若对线性表举行的左右吃紧不是插入和节俭,则该线性表宜选取——存储组织,若 屡次地对线性表举办插入和减削负责,则该线性表宜采用——保管组织。 (13)节约由 list 所指的线性链表的第一个链结点是实施掌管——。 (14)节流非空线性链表中由 q 所指的链结点(其直接前驱结点由 r 指出)的举措是履行语句 ——和——。 (15)在线性链表中由 q 所指的链结点不和插入一个所在为 p 的新结点的经历是依序履行操 作——和——。 (16)若 p 为指向循环链表中某链结点的指针变量,审定循环链表是否唯有一个链结点的标 志 是——。 (17)删除非空双向链表中由 q 所指的链结点的源委是实施语句——和——。 (18)在具有 n 个链结点的链表的已知地址插入一个链结点的时刻混杂度为——。 (19)在具有 n 个链结点的链表中征采一个链结点的时辰搀和度为——。 (20)一元多项式 f(x)二 9x1’—4x8+3x—5 的线 已知长度为 n 的线性表 A 接纳顺次保存结构,请写一算法,找出该线性表中值最小的 . 数据元素。 2.5 已知长度为 n 的线性表 A 采纳顺序保留机关,请写出逆转该线性表的算法,即由 A 二 . (al,a2,…,An-l,An)生长 A:(An-1,An,…,A1,A2),央浼在逆转始末中用最少的附加 空间(即用尽或许少的助理变量)。 2.6 已知线性表 A 的长度为 n,而且采用按次保管组织,请写一算法,节流该线性表中所 . 有值为 d 的数据元素,并商酌算法的时刻同化度。 2. 已知长度为 n 的线性表 A 采取按次存储机关, 7 而且每个数据元素均为一个无象征整数, . 请写一算法,节约线 已知长度为 n 的线性表 A 采用递次生存结构,请写偶然间驳杂度为 O(n)的算法,该算 . 法省略线性表中国来序号为奇数的那些数据元素。 2.9 已知长度为 n 的线性表 A 采用顺次保存构造,写一算法,节减表中屡次滋长的所罕见 . 据元素 苦求:残余元素的相对所在支柱坚韧。 2.10 已知长度为 n 的线性表 A 接纳按序存储机合,况且元素按值的大小非递减罗列,请 . 写一算法, 在线性表中插入一个新的数据元素让 em, 央求插入今后线性表中元素依然保卫按值 的大小非递减罗列。 2.11 已知长度为 n 的线性表 A 采用依次保留结构,写一算法,节流一切值大于 x 且小于 y . 的数据元素。 2.12 请写一算法,过程键盘输入一系列数据元素,征战一个长度为 n、且不包含屡屡元素 . 的线性表 A。这里,设线性表 A 选取的生存机合为按序保存组织,而且如果空间足够。 2。13 已知线性表 A 与线性表 B 的长度分辨为 n 与 m,况且都采用按次保管构造,写一算 。 法,在线性表 A 的第 i 个处所插入线性表 B。约定:不探讨保管空间溢出问题。 2.14 已知非空线性链表的第一个链结点的留存地点为 list,写出减削该链表第 i 个链结点 . 的算法。 2.15 已知非空线性链表第一个链结点的保留地址为 1ist,试写出节约链表中从第 i 个链结 . 点开始的(收集第 i 个链结点本身)贯串 k 个链结点的算法。 2.16 已知线性链表第一个链结点的存在地址为 1ist,写一算法,把该链表中数据域值为 d . 的总共链结点的数据域值修削为 p。 2.17 已知线性链表第一个链结点指针为 list,写一算法,省略链表中数据域值最大的谁人 . 链结点。 2.18 已知线性链表第一个链结点指针为 list,写一算法》 断该链表是否是有序链表(即链 ,j . 结点是否遵从数据域大小链接),倘使,算法返回 1,否则返回—1。881309聊吧联盟现场开奖 彩虹-5无人机。 2.19 已知线性链表第一个链结点指针为 1ist,写一算法,更调 p 所指链结点与其下一个链 . 结点的位置(设 p 指向的不是链表末尾谁人链结点)。 2.20 已知非空线性链表第一个链结点由 list 指出,请写一算法,将链表中数据域值最小的 . 链结点移到链表最前面。 2.21 已知非空线性链表第一个结点的指针为 list,试编写一算法按递减秩序打印各链结点 . 数据域的内容(指点:在链表中打出最大值结点,打印之后将其节俭。频频奉行,直到链表为空 时为止)。 2.22 已知一个不发动结点也无头指针变量,况且长度大于 1 的循环链表,试写一算法,删 . 除 p 所指链结点的直接前驱结点。 2.23 已知带有头结点的循环链表中头结点的指针为 list,试写出俭朴并释放数据域内容为 . x 的齐备结点的算法。 2.24 已知线性链表第一个链结点的指针为 list,试写一算法,节减数据域值相通的足够结 . 点,即: 若链表中有多个结点具有宛如的数据域值,只依旧个中一个结点,另外结点均从链表中的 着末删去,使得到的链表中总共结点的数据域值都不相仿。 2.25 设线,…,Xn)与 Y=(yl,y2,…,ym)都采用链式保管组织(两个链表 . 第一个结点的指针可以用 X 与 Y 分 9U 表现)。 试写一个算法统一这两个线,…,xm,Ym,Xm+1,…,Xn) 当 m≤n 时 ((x1,Y1,x2,y2,…,xn,yn,yn+1,…,ym) 当 mn 时 2.27 试写出将一个线性链表(第一个结点的存储地点为 list)分析为两个循环链表,并将两 . 个循环链表的长度寄存在各自的头结点的数据域中的算法。 认识原则:若线性链表中某一链结点属于第一个循环链表,则下一个链结点就属于第二 个循环链表;反之,若线性链表中某一个链结点属于第二个循环链表,则下一个链结点就 属于第一个循环链表。 2. .28 设 A 与 B 分辨为两个带有头结点的有序循环链表(所谓有序是指链结点按数据域值大小 链接,这里,可以按数据域值从小到大链接),lista 和 listb 离别为两个链表的头结点指针。请写 出将这两个链表合并为一个带头结点的有序循环链表的算法。 2.29 已知循环链表头结点指针 list,请编写一个能逆转链表方向的算法。 . 2.30 写一算法,先从键盘输人 n 个整型数,建立一个带有头结点的双向循环链表,而后按 . 照与输入相反的规律依次输出这 n 个整型数。 2. 31 在非空双向循环链表中由 q 所指的结点反目插入一个数据信息为 item 的新结点的算法 . 如下: voidINSERTD(DLinkListq,datatypeitem) { DLinkList p; p:(DLinkList)malloc(sizeof(DNode)); /*申请一个新的链结点*/ p-data=item; p-llink=q; p-rlink=q-rlink; q-rlink=p; 请在算法的方框中填上须要的步履(一条语句)。 2.32 有人谈线性表的递次保全结构比链式存储机合的保存空间支拨要小,也有人说线性表 . 的链式保留构造比按次保留构造的保留空间支出要小, 大家是奈何对待这两种谈法的?请证明大家的 观点。 第二章 历年试题 ) 1.在线性表的下列生存结构中,读取元素破费岁月最少的是( A.单链表 B.双链表 C.循环链表 D.递次表 2.依次保留的线,…,an),在任一结点前插入一个新结点时所需转移结点的平均次数 为( ) A.n B.n/2 C.n+1 D.(n+1)/2 3.在长度为 n 的按序表的第 i(1≤i≤n+1)个住址上插入一个元素,元素的挪动次数为( ) A.n-i+1 B.n- i C.i D.i-1 4.在依序保管的线…,an)中的第 i (1≤i≤n)个元素之前插入一个元素,则需向后 转移_________个元素。 一、挑撰题 1.在线性表的下列保管结构中,读取元素花费时辰最少的是( ) A.单链表 B.双链表 C.循环链表 D.递次表 2.依次保管的线,…,an),在任一结点前插入一个新结点时所需搬动结点的均衡次 数为( ) A.n B.n/2 C.n+1 D.(n+1)/2 3.在长度为 n 的按序表的第 i(1≤i≤n+1)个住址上插入一个元素,元素的转移次数为( ) A.n-i+1 B.n- i C.i D.i-1 4.在顺次保管的线…,an)中的第 i (1≤i≤n)个元素之前插入一个元素,则需向 后移动_________个元素。 5.在以单链表为生存机关的线性表中,数据元素之间的逻辑合系用( A.数据元素的相邻地点表现 C.指向后继元素的指针默示 B.数据元素在表中的序号表示 D.数据元素的值显露 ) ) 6.设 p 指向单链表中的一个结点,s 指向待插入的结点,则下述设施段的效果是( s - next = p - next; p - next = s; t = p - data; p - data = s - data; A.结点*p 与结点*s 的数据域换取 B.在 p 所指结点的元素之前插入元素 C.在 p 所指结点的元素之后插入元素 D.在结点*p 之前插入结点*s 7.在线性表的下列保全构造中,读取元素破钞功夫最少的是( A.单链表 C.循环链表 空白处应为: q=NULL; while (p!=NULL) { ( } p=q; B.双链表 D.挨次表 ) s -data = t; 8.将一个头指针为 p 的单链表中的元素按与原单链表相反的规律存放,则下列算法段中的 ) A. r =q; q=p; p=p - next; q - next=r; B.q=p; r=q; p=p - next; q - next=r; C.r=q; p=p - next; q=p; q - next=r; D.q=p; p=p - next; r=q; q - next=r; 9.对付只在表的首、尾两端举办插入支配的线性表,宜接纳的保留结构为( ) A.依次表 B.用头指针呈现的单循环链表 C.用尾指针透露的单循环链表 D.单链表 10.设单链表中结点的构造为 typedef struct node { //链表结点定义 ElemType data; //数据 struct node * Link; //结点后继指针 } ListNode; (1) 已知指针 p 所指结点不是尾结点, 若在*p 之后插入结点*s, 则应实施下列哪一个独揽? A. s-link = p; p-link = s; B. s-link = p-link; p-link = s; C. s-link = p-link; p = s; D. p-link = s; s-link = p; (2) 非空的循环单链表 first 的尾结点(由 p 所指向)顺心: A. p-link == NULL; B. p == NULL; C. p-link == first; D. p == first; 二、审定题。 审定题。 (1) 线性表的逻辑顺序与物理顺序总是一样的。 (2) 线性表的顺序保全体现优于链式存在透露。 (3) 线性表若采用链式存储体现时整个结点之间的保全单元地方可毗连可不相接。 (4) 二维数组是其数组元素为线) 每种数据结构都应齐备三种基本运算:插入、节约和查究。 填空题。 三、填空题。 1.已知指针 p 指向单链表中某个结点,则语句 p - next =p - next - next 的效力是 ________。 2.若链串结点中的指针占 4 个字节,每个字符占 1 个字节,则结点大小为 2 的链串的保管 密度为________。 3.设某非空双链表,其结点款式为若要节约指针 q 所指向的结点,则需实行下述语句段: q-prior-next=q-next; __ _____________。 prior data next 4.在如图所示的链表中, 若在指针 p 所指的结点之后插入数据域值相继为 a 和 b 的两个结 点,则可用下列两个语句落成该负责,它们依次是________和________。 5.函数中,h 是带动结点的双向循环链表的头指针。 (1) 评释手腕的成绩; (2) )当链表中结点数区别为 1 和 6(不搜集头结点)时,请写出步调中 while 循环体 的履行次数。 int f(DListNode *h) { DListNode *p,*q; int j=1; p=h-next; q=h-prior; while(p!=q && p-prior!=q) if(p-data==q-data) { p=p-next; q=q-prior; } else j=0; return j; } 6.下列函数的功效是,对以带动结点的单链表算作保存结构的两个递增有序表(表中不 生活值好像的数据元素)进行如下控制:将绝对在 Lb 表中糊口而 La 表中不生涯的结点插入 到 La 中,个中 La 和 Lb 分手为两个链表的头指针。请在空缺处填入适应内容,使其成为一 个完备的算法。 void union (LinkList La, LinkList Lb) { //本算法的生效是将全盘 Lb 表中存在而 La 表中不生涯的结点插入到 La 表中 LinkList pre = La, q; LinkList pa = La - next; LinkList pb = Lb - next; free (Lb); while (pa && pd) { if (pa - data pb - data) { pre = pa; pa = pa - next;} else if (pa - data pb -data) { (1) pre = pb; pb = pb - next; (2) ; ; } else { q = pb; pb = pb - next; free (q); } } if (pb) (3) } 四、步骤联想 1、设某头指针为 head 的单链表的结点构造分析如下: 分) (6 typedef struct node1 { int data; struct node1*next }node; 试联想一个算法 void change (node*head),将该单链表中的元素按原单链表相反的规律从新 寄放,即第一个结点酿成着末一个结点,第二个结点变为倒数第二个结点,这样等等。 2.设某带动结头的单链表的结点结构声明如下: typedef struct nodel { int data; struct nodel*next; }node; 试着想一个算法:void copy(node*head l, node*head 2),将以 head 1 为头指针的单链表复制 ; 到一个不带有头结点且以 head2 为头指针的单链表中。 分) (6 3、 设带表头结点的双向链表的定义为 、 、设带表头结点的双向链表的定义为 、 typedef int ElemType; typedef struct dnode { //双向链表结点定义 双向链表结点定义 双向链表结点 ElemType data; //数据 数据 struct dnode * lLink, * rLink; //结点前驱与后继指针 结点前驱与后继指针 } DblNode; typedef DblNode * DblList; //双向链表 双向链表 试想象一个算法,蜕变一个带表头结点的双向链表, 试联想一个算法,调动一个带表头结点的双向链表,完整结点的原有规律保卫在各个结点的 把完全结点屈从其值从小到大的顺序持续起来。 右链域 rLink 中,并戏弄左链域 lLink 把统统结点顺从其值从小到大的递次毗连起来。 4、阅读以下办法证实和C步调,将应填入法子中(n) 处的字句,写在答卷的对应栏内。 要领诠释] [门径注明] 簿子步伐欺骗递归法识别用链表呈现的两个非递归链表是否万分. 程序中的非递归列表定义为: ⑴无元素的空列表; ⑵由元素序列组成的一个列表,其中的元素可因此一个字符, 或许是满足本定义的一个列 表. 这种列表的一个例子是: S ┌───┐ ┌─┬─┬─┐ ┌─┬─┬─┐ │ ├→┤0 │a│ ├-→┤1│││^│ └───┘ └─┴─┴─┘ └─┴┼┴─┘ ┌──────┘ │ ┌─┬─┬─┐ ┌─┬─┬─┐ └→┤0 │b│ ├→┤0│c │^│ └─┴─┴─┘ └─┴─┴─┘ 列表S由两个元素组成:第一个元素是字符a (标志为0);第二个元素是另一个列*表(记号 为1),该元素另有两个元素组成(象征为0),告辞为字符b和字符c. 在两个列表中,若它们的元素个数很是,且表中元素依次似乎,则两个列表相称(子手段回复 1),否则不相当(子举措回答0). 方法] [办法] typedef struct lnode { int tag; union { char data; struct lnode *dlink; } un; struct lnode *link; } listnode; int equal(s,t) listnode *s,*t; { int x,res; if(s==t) __(1)__ ; else if( __(2)__ ) if( __(3)__ ) { if(!s-tag) x= __(4)__ ; else x= __(5)__ ; if(x) return (__(6)__); } return(0); } 5、阅读下列函数注释和C代码,将应填入其中__(n)__处的字句写在答卷的对应栏内。 【函数1.1注脚】 设链表结点的典型为 typedef struct elem{ int val; struct elem *next; }intNode; 函数merge(int *a,int *b)是将两个升序链表a和b关并成一个升序链表。 【函数1.1】 intNode *merge(intNode *a,intNode *b) { intNode *h=a,*p,*q; while(b) { for (p=h;p && p→val b→val;q=p,p = p→next); if (p = = h) __(1)__;else __(2)__; q=b;b=b→next; __(3)__; } return h; } 【函数1.2注解】 递归函数dec(int a[],int n)判定数组a[]的前n个元素是否是不递增的。不递增返回1, 否则返回0。 【函数1.2】 int dec(int a[],int n) { if (n=1) __(4)__; if (a[0]a[1]) return 0; return __(5)__; } 试题13 阅读以下方法说明和C方法,将应填入步骤中 (n) 处的字句,写在答卷的对应栏内。 法子解释] [步伐说明] 本步伐给出两个函数。函数create()凭借已知整数数组构造一个线性链表。函数sort()采 用抉择排序手段对已知链表举行排序。为排序轻易,函数sort()于排序前,在链表首表元之前 天禀一个援手表元。排序告竣后,将该辅助表元删去. 【程 序】 #include stdio.h #include stdlib.h struct node{ int value; struct node *next; }; struct node *create(int a[], int n) { struct node *h, *q; for(h=NULL;n;n--) { q = (struct node *)malloc(sizeof(struct node)); q→value = _____(1)_______; ______(2)_______; ______(3)______; } return h; } void sort(struct node **h) { struct node *p,*q,*r,*s,*hl; hl = p = (struct node*)malloc(sizeof(struct node)); p→next = *h; while(p→next != NULL) { q = p→next; r = p; while(p→next != NULL) { if (q→next→value _____(4)_____ ) r = q; q = q→next; } if( r != p ) { s = ______(5)______; ______(6)_______ = s→next; s-→next = ___________; ______(8)_____ = s; } p = p→next; } *h = hl→next; free(hl); } int text_data[] = {5,9,3,4,5,7,8}; main() { struct node *h, *p; h = create(test_data, sizeof test_data/size of test-data[0]); for(p=h;p;p=p→next) printf(“%5d”,p→value); printf(“\n”); sort(&h); for(p=h;p;p=p→next) printf(“%5d”,p→value); printf(“\n”); }28249挂牌藏宝图,http://www.wm46j.com


Copyright 2017-2023 http://www.hostosa.com All Rights Reserved.