




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
知识点:01.绪论02.顺序表03.链表04.栈05.链队列06.循环队列07.串08.数组的顺序表示09.稀疏矩阵10.广义表11.二叉树的基本概念12.二叉树遍历、二叉树性质13.树、树与二叉树的转换14.赫夫曼树15.图的定义、图的存储16.图的遍历17.图的生成树18.静态查找(顺序表的查找、有序表的查找)19.动态查找(二叉排序树、平衡树、B树)20.哈希查找21.插入排序(直接插入、折半插入、2路插入、希尔排序)22.选择排序(简单选择、树形选择、堆排序)23.快速排序、归并排序
101A1(1).数据的逻辑结构是(A)。A.数据的组织形式B.数据的存储形式C.数据的表示形式D.数据的实现形式101A1(2).组成数据的基本单位是(C)。A.数据项B.数据类型C.数据元素D.数据变量101B1(3).与顺序存储结构相比,链式存储结构的存储密度(B)。A.大B.小C.相同D.以上都不对101B2(4).对于存储同样一组数据元素而言,(D)。A.顺序存储结构比链接结构多占空间B.在顺序结构中查找元素的速度比在链接结构中查找要快C.与链接结构相比,顺序结构便于安排数据元素D.顺序结构占用整块空间而链接结构不要求整块空间101B2(5).下面程序的时间复杂度为(B)。x=0;for(i=1;i<n;i++)for(j=i+1;j<=n;j++)x++;A.O()B.O(n2)C.O(1)D.O(n)101B2(6).下面程序的时间复杂度为(C)。for(i=0;i<m;i++)for(j=0;j<n;j++)A[i][j]=i*j;A.O(m2)B.O(n2)C.O(m×n)D.O(m+n)101C2(7).下面程序段的执行次数为(B)。for(i=0;i<n-1;i++)for(j=0;j>i;j++)state;A.n(n+1)/2B.(n-1)(n+2)/2C.n(n+1)/2D.(n-1)(n+2)101D3(8).下面程序的时间复杂度为(A)。for(i=0;i<m;i++)for(j=0;j<t;j++)c[i][j]=0;for(i=0;i<m;i++)for(j=0;j<t;j++)for(k=0;k<n;k++)c[i][j]=c[i][j]+a[i][k]*b[k][j];A.O(m×n×t)B.O(m+n+t)C.O(m+n×t)D.O(m×t+n)102A1(9).顺序表的特点是(B)。A.表中元素的个数为表长B.按顺序方式存储数据元素C.逻辑结构中相邻的结点在存储结构中仍相邻D.按表中元素的次序存储102C2(10).设顺序表共有n个元素,用数组elem存储,实现在第i个元素之前插入一个元素e的操作,其主要语句为(D)。A.FORj=nDOWNTOiDOelem[j]=elem[j+1];elem[i]=e;B.FORj=iTOnDOelem[j]=elem[j+1];elem[i]=e;C.FORj=iTOnDOelem[j+1]=elem[j];elem[i]=e;D.FORj=nDOWNTOiDOelem[j+1]=elem[j];elem[i]=e;102D2(11).顺序表有5个元素,设在任何位置上插入元素是等概率的,则在该表中插入一个元素时所需移动元素的平均次数为(C)。A.3B.2C.2.5D.5102D2(12).设顺序表有9个元素,则在第3个元素前插入一个元素所需移动元素的个数为(C)。A.9B.4.5C.7D.6102D3(13).设顺序表有19个元素,第一个元素的地址为200,且每个元素占3个字节,则第14个元素的存储地址为(B)。A.236B.239C.242D.245102D2(14).设顺序表的第5个元素的存储地址为200,且每个元素占一个存储单元,则第14个元素的存储地址为(B)。A.208B.209C.210D.214103D3(15).设p为指向双向循环链表中某个结点的指针,p所指向的结点的两个链域分别用p->llink和p->rlink表示,则下列等式中(D)成立。A.p=p->llinkB.p=p->rlinkC.p=p->llink->llinkD.p=p->llink->rlink103A1(16).线性表采用链式存储时,其地址(D)。A.必须是连续的B.一定是不连续的C.部分地址必须是连续的D.连续与否均可以103B1(17).线性表是(A)。A.一个有限序列,可以为空B.一个有限序列,不可以为空C.一个无限序列,可以为空D.一个无限序列,不可以为空103B1(18).链式存储的线性表中的指针指向其(B)。A.前趋结点B.后继结点C.物理前趋D.物理后继103C2(19).设在链式存储的线性表中,设结点结构为datalink,欲在p结点后插入一个结点q的关键步骤为(A)。A.q->link=p->link;p->link=q;B.p->link=q->link;p->link=q;C.q->link=p->link;q->link=p;D.p->link=q->link;q->link=p;103C3(20).设有指针head指向的带表头结点的单链表,现将指针p指向的结点插入表中,使之成为第一个结点,其操作是(A)(其中,p->next、head->next分别表示p、head所指结点的链域)。A.p->next=head->next;head->next=p;B.p->next=head->next;head=p;C.p->next=head;head=p;D.p->next=head;p=head;104A1(21).在栈中,下列说法正确的是(A)。A.每次插入总是在栈顶,每次删除也总是在栈顶。B.每次插入总是在栈顶,每次删除总是在栈底。C.每次插入总是在栈底,每次删除总是在栈顶。D.每次插入总是在栈底,每次删除也总是在栈底。104B2(22).设有一个栈,按A、B、C的顺序进栈,则下列(C)为不可能的出栈序列。A.ABCB.CBAC.CABD.ACB104B2(23).设有一个栈,按A、B、C、D的顺序进栈,则下列(D)为可能的出栈序列。A.DCABB.CDABC.DBACD.ACDB104A2(24).顺序栈的上溢是指(B)。A.栈满时作退栈运算B.栈满时作进栈运算C.栈空时作退栈运算D.栈空时作进栈运算104D3(25).顺序栈S中top为栈顶指针,指向栈顶元素所在的位置,elem为存放栈的数组,则元素e进栈操作的主要语句为(D)。A.s.elem[top]=e;s.top=s.top+1;B.s.elem[top+1]=e;s.top=s.top+1;C.s.top=s.top+1;s.elem[top+1]=e;D.s.top=s.top+1;s.elem[top]=e;104C2(26).设有5个元素A,B,C,D,E顺序进栈(进栈过程中可以出栈),出栈后依出栈次序进入队列,已知其出队次序为D,C,E,B,A,则该栈容量必定不小于(C)。A.2B.3C.4D.5104B2(27).设栈S的初始状态为空,现有五个元素组成的序列1,2,3,4,5,对该序列在栈S上依次进行PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH操作,出栈的元素序列是(C)。A.5,4,3,2,1B.2,1C.2,3D.3,4104B2(28).在一个具有n个单元的顺序栈中,假定以地址低端(即0单元)作为栈底,以top为栈顶指针,则当做出栈处理时,top变化为(C)。A.top不变B.top=0C.top--D.top++104D3(29).向一个栈顶指针为hs的链栈中插入一个*s结点时,应执行(B)。A.hs->next=s;B.s->next=hs;hs=s;C.s->next=hs->next;hs->next=s;D.s->next=hs;hs=hs->next;105A1(30).在队列中,下列说法正确的是(A)。A.每次插入总是在队尾,每次删除总是在队头。B.每次插入总是在队尾,每次删除也总是在队尾。C.每次插入总是在队头,每次删除也总是在队头。D.每次插入总是在队头,每次删除总是在队尾。105D3(31).在带头结点的链队列q中,用q.front表示队头指针,q.rear表示队尾指针,结点结构为datanext,删除链队列的队头结点的主要语句为(B)。A.s=q.front;q.front->next=s.next;B.s=q.front->next;q.front->next=s.next;C.s=q.front->next;q.front=s.next;D.s=q;q.front->next=s.next;106C3(32).循环队列sq中,用数组elem存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,队列的最大容量为MAXSIZE,则队列满的条件为(D)。A.sq.front=sq.rearB.sq.front=sq.rear+1C.(sq.front+1)modMAXSIZE=sq.rearD.(sq.rear+1)modMAXSIZE=sq.front106C2(33).循环队列sq中,用数组elem存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,队列的最大容量为MAXSIZE,则在队列未满时元素x入队列的主要操作为(A)。A.sq.rear=(sq.rear+1)modMAXSIZE;sq.elem[sq.rear]=x;B.sq.elem[sq.rear]=x;sq.rear=(sq.rear+1)modMAXSIZE;C.sq.front=(sq.front+1)modMAXSIZE;sq.elem[sq.front]=x;D.sq.elem[sq.front]=x;sq.front=sq.front+1;106B2(34).循环队列sq中,用数组elem[0‥25]存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,设当前sq.front为20,sq.rear为12,则当前队列中的元素个数为(D)。A.8B.16C.17D.18106B2(35).设循环队列的元素存放在一维数组Q[0‥30]中,队列非空时,front指示队头元素的前一个位置,rear指示队尾元素。如果队列中元素的个数为11,front的值为25,则rear应指向(B)元素。A.Q[4]B.Q[5]C.Q[14]D.Q[15]105A1(36).队列操作的原则是(A)。A.先进先出B.后进先出C.只能进行插入D.只能进行删除105B2(37).一个队列的入列序列是1234,则队列的输出序列是(B)。A.4321B.1234C.1432D.3241108C2(38).设6行8列的二维数组A6×8=(aij)按行优先顺序存储,若第一个元素的存储位置为200,且每个元素占3个存储单元,则元素a54的存储位置为(B)。A.308B.305C.266D.269109C2(39).设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一个元素,其存储地址为1,每元素占1个地址空间,则a85的地址为(B)。A.13B.33C.18D.40108A1(40).设二个数组为A[0‥7]、B[-5‥2,3‥8],则这两个数组分别能存放的字符的最大个数是(C)。A.7和35B.1和5C.8和48D.1和6108C3(41).二维数组M[i,j]的元素是4个字符(每个字符占一个存储单元)组成的串,行下标i的范围从0到4,列下列j的范围从0到5。M按行存储时元素M[3,5]的起始地址与M按列存储时元素(B)的起始地址下同。A.M[2,4]B.M[3,4]C.M[3,5]D.M[4,4]108C2(42).设二维数组为M[0‥8,0‥10],每个元素占2L个存储单元,以行序为主序存储,第一个元素的存储位置为P。存储位置为P+50L的元素为(A)。A.M[2,3]B.M[2,2]C.M[3,3]D.M[3,4]108C2(43).设二维数组A的维数界偶定义为[1‥8,0‥10],起始地址为LOC,每个元素占2L个存储单元,以行序为主序存储方式下,某数据元素的地址为LOC+50L,则在列序为主序存储方式下,该元素的存储地址为(D)。A.LOC+28LB.LOC+36LC.LOC+50LD.LOC+52L109B2(44).数组A[1‥40,1‥30]采用三元组表示,设数组元素与下标均为整型,则在非零元素个数小于(D)时,才能节省存储空间。A.1200B.401C.399D.400108A1(45).一维数组通常采用顺序存储结构,这是因为(C)。A.一维数组是一种线性数据结构B.一维数组是一种动态数据结构C.一旦建立了数组,则数组中的数据元素之间的关系不再变动D.一维数组只能采用顺序存储结构109A1(46).对稀疏矩阵进行压缩存储的目的是(B)。A.方便存储B.节省存储空间C.方便运算D.节省运算时间108D3(47).设二维数组a[0‥5,0‥6]按行存储,每个元素占d个存储单元,如果每个元素改为2d个存储单元,起始地址不变,则元素a[2,6]的存储地址将要增加(A)个存储单元。A.20dB.21dC.38dD.39d108B2(48).一维数组与线性表的区别是(A)。A.前者长度固定,后者长度可变B.后者长度固定,前者长度可变C.两者长度均固定D.两者长度均可变107A1(49).下列关于串的叙述中,不正确的是(B)。A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储107B2(50).以下论断正确的是(A)。A.“”是空串,“”是空白串B.“BEIJING”是“BEIJING”的子串C.“something”<“Somethig”D.”BIT”=”BITE”107B2(51).字符串“VARTYPEunsignedint”若采用动态分配的顺序存储方法需要(C)个字节(假设每种数据均占用2个字节)。A.38B.动态产生,视情况而定C.40D.42111A1(52).由3个结点可以构造出(A)种不同形态的有向树。A.2B.3C.4D.5111A1(53).下列树的度为(B)。A.2B.3C.5D.8112C2(54).含10个结点的二叉树中,度为0的结点有4个,则度为2的结点有(A)个。A.3B.4C.5D.6111B2(55).对一棵有100个结点的完全二叉树按层编号,则编号为49的结点,它的左孩子的编号为(A)。A.98B.99C.97D.50112B2(56).一棵深度为8(根的层次号为1)的满二叉树有(B)个结点。A.256B.255C.128D.127112C3(57).设二叉树根结点的层数为1,若一棵高(深)度为h的二叉树只有度为0与度为2的结点,则其结点数至少为(B)。A.hB.2h-1C.2hD.2h+1112C2(58).对下列二叉树进行先根次序遍历,所得次序为(A)。A.ABCDEFB.ADCBFEC.BCDAFED.DCBFEA112D3(59).一棵二叉树的前(先)序序列为ABCDEFG,则它的中序序列不可能为(C)。A.CBDAFEGB.DCBAEFGC.CDBAGEFD.BDCAFGE112A1(60).若先序遍历二叉树的结果为结点序列A,B,C,则有(C)棵不同的二叉树可以得到这一结果。A.3B.4C.5D.6111B2(61).具有n个结点的二叉树,有(B)条边。A.nB.n-1C.n+1D.2n112C2(62).在具有n个结点的二叉树的二叉链表表示中,2n个孩子指针域中,只用到(B)个域。A.nB.n-1C.n+1D.2n114B2(63).对哈夫曼树,下列说法错误的是(B)。A.哈夫曼树是一类带树路径长度最短的树。B.给出一组数,构造的哈夫曼树唯一。C.给出一组数,构造的哈夫曼树的带树路径长度不变。D.哈夫曼树的带权路径长度为每个叶子的路径长度与该叶子权值乘积之和。111D3(64).假定在一棵二叉树中,双分支结点数为15个,单分支结点数为30个,则叶子结点数为(B)。A.15B.16C.17D.47113C3(65).假定一棵三叉树的结点数为50,则它的最小高度为(C)。A.3B.4C.5D.6114B2(66).由带权为9,2,5,7的四个叶子结点构造一棵哈夫曼树,该树的带权路径长度为(D)。A.23B.37C.46D.44112C2(67).二叉树的先序遍历为EFHIGJK,中序遍历为HFIEJKG,则该二叉树根的右子树的根是(C)。A.EB.FC.GD.H111A1(68).在完全二叉树中,若一个结点是叶结点,则它没有(C)。A.左孩子结点B.右孩子结点C.左孩子和右孩子结点D.左孩子结点,右孩子结点和兄弟结点113B2(69).(B)二叉树,可以唯一地转化成一棵一般树。A.根结点无左孩子B.根结点无右孩子C.根据结点有两个孩子D.没有一棵111C2(70).具有65个结点的完全二叉树其深度为(B)。A.8B.7C.6D.5112C2(71).某二叉树的先序序列和后序序列正好相反,则该二叉树一定是(B)的二叉树。A.空或只有一个结点B.高度等于其结点数C.任一结点无左孩子D.任一结点无右孩子113A1(72).下面叙述中,不正确的是(C)。A.线性表中除第一个元素和最后一个元素外,其他每个元素都有且仅有一个直接前驱和一个直接后继B.树中有且仅有一个结点没有前驱C.环形队列中任何一个元素都有且仅有一个直接前驱和一个直接后继D.在树中,一个结点可以有多个直接后继114B2(73).有m个叶子结点的哈夫曼树,其结点总数是(C)。A.2mB.2m+1C.2m-1D.2(m+1)115A1(74).设图的邻接矩阵为,则该图有(A)个顶点。A.3B.4C.6D.9115B2(75).设图的邻接矩阵为,则该图为(A)。A.有向图B.无向图C.强连通图D.完全图115B2(76).设图的邻接链表如下图所示,则该图有(B)条边。1V1234^2V2134^3V312^4V412^A.4B.5C.10D.20115C2(77).设有6个结点的无向图,该图至少应有(B)条边才能确保是一个连通图。A.5B.6C.7D.8116D3(78).已知一有向图的邻接表存储结构如下,则根据有向图的深度优先遍历算法,从顶点V1出发,不能得到的顶点序列是(C)。1324^2^345^4^524^A.V1V2V3V5V4B.V1V3V4V5V2C.V1V2V4V5V3D.V1V4V3V5V2119C3(79).下列图的深度优先遍历序列为(B)。ABCDEFGHA.ABCDEFGHABCDEFGH115B1(80).对一个具有n个顶点的图,采用邻接矩阵表示则该矩阵的大小为(D)。A.nB.(n-1)2C.(n+1)2D.n2118B2(81).对含n个记录的顺序表进行顺序查找,在最坏情况下需要比较(B)次。A.n-1B.nC.(n+1)/2D.n(n-1)/2118B2(82).对含n个记录的有序表进行折半查找,设每个记录的查找概率相等,则平均查找长度的数量级为(C)。A.O(n)B.O(n2)C.O()D.O(1)119B2(83).有一棵二叉树如下图,该树是(B)。5020951030557085A.二叉平衡树B.二叉排序树C.堆的形状D.以上都不是119C3(84).已知10个数据元素(50,30,15,35,70,65,95,60,25,40),按照依次插入结点的方法生成一棵二叉排序树后,在查找成功的情况下,查找每个元素的平均比较次数(又称平均查找长度)为(C)。A.2.5B.3.2C.2.9D.2.7118C3(85).在顺序存储的线性表R[0‥29]上进行分块查找(设分为5块)的平均查找长度为(D)。A.6B.11C.5D.6.5120D3(86).已知一个线性表(38,25,74,63,52,48),假定采用h(k)=k%7计算散列地址进行散列存储,若引用线性探测的开放定地址法解决冲突,则在该散列表上进行查找的平均查找长度为(C)。A.1.5B.1.7C.2D.2.3119A1(87).在一个3阶的B-树上,每个结点包含的子树相同,最多为(C)。A.1B.2C.3D.4120B2(88).设散列地址空间为0~m-1,k为关键字,用P去除k,将余数作为k的散列地址,即:h(k)=k%P,为了减少发生冲突的可能性,一般取P为(B)。A.小于m的最大奇数B.小于m的最大素数C.小于m的最大偶数D.小于m的最大合数120C3(89).设散列表表长m=14,散列函数为h(k)=k%11,表中已有4个记录,如果用二次探测再散列处理冲突,关键字为49的记录的存储地址是(D)。01234567891011121315386184A.8B.3C.5D.9119C3(90).已知8个元素(34,76,45,18,26,54,92,65),按照依次插入结点的方法生成一棵二叉排序树,该树的深度为(C)。A.4B.5C.6D.7121B1(91).直接插入排序算法的时间复杂度为(B)。A.O(n)B.O(n2)C.O()D.O(1)121B2(92).设记录关键字序列为(84,67,21,50,33,79),采用对半插入排序方法自小到大进行排序时,记录的移动次数为(C)。A.9B.10C.19D.25123D3(93).下列四个序列中,(D)不是快速排序第一趟的可能结果。A.[68,11,69,23,18,70,73]93B.11[68,69,23,18,70,73,93]C.[68,11,69,23,18]70[93,73]D.[18,11,23]93[68,70,69,73]122C3(94).下列四个关键字序列中,(C)不是堆。A.{05,23,16,68,94,72,71,73}B.{05,16,23,68,94,72,71,73}C.{05,23,16,73,94,72,71,68}D.{05,23,16,68,73,71,72,94}123B2(95).从未排序序列中依次取出元素与已排序序列中的元素作比较,将其放入已排序序列中的正确位置上,此方法称为(D)。A.归并排序B.选择排序C.交换排序D.插入排序123B2(96).在所有排序方法中,关键字的比较次数与记录的初始排列无关的是(D)。A.Shell排序B.冒泡排序C.直接插入排序D.直接选择排序123B2(97).下列排序算法中,第一趟排序后,任一元素都不能确定其最终位置的算法是(B)。A.选择B.插入C.冒泡D.快速123C2(98).采用下列排序算法对n个元素进行排序,其排序趟数肯定为n-1趟的排序方法有(A)。A.选择和插入B.冒泡和快速C.插入和快速D.选择和冒泡123D3(99).若用冒泡排序方法对序列{10,14,26,29,41,52}从大到小进行排序,需要进行(C)次比较。A.5B.10C.15D.25121C3(100).用直接插入排序方法对下面四个序列进行排序(由小到大),元素比较次数最少的是(C)。A.94,32,40,90,80,46,21,69B.32,40,21,46,69,94,90,80C.21,32,46,40,80,69,90,94D.90,69,80,46,21,32,94,40
二、填空题101A1(1).数据结构按逻辑结构可分为两大类,它们分别是(线性结构和非线性结构)。101A1(2).算法的计算量的大小称为(计算的复杂度)。102B2(3).顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作的时间代价基本上都是等效的。则插入一个元素大约要移动表中的(n/2)个元素。103A2(4).顺序表相对于链表的优点有(节省存储)和(随机存取)。103B2(5).线性表的长度是(表中数据元素的个数)。103D3(6)在带有头结点的双链表L中,指针p所指结点是第一个元素结点的条件是(p=L->next;或L->next=p;)。103C3(7).某链表如下所示infolinkpABCDE^若要删除值为C的结点,应做操作(p->link=p->link->link)。104A1(8).对于栈只能在(栈顶)插入和删除元素。104C2(9).设有一空栈,现有输入序列1,2,3,4,5,6,经过push,push,pop,push,pop,push,push后,输出序列是(2、3)。106B2(10).有一个循环队列如下图,其队满条件是(front=(rear+1)%n),队列空的条件是(rear=front)。front…队头指针rear队尾指针109B2(11).一个稀疏矩阵为,则对应的三元组线性表为(((0,2,2),(1,0,3),(2,2,-1),(2,3,5)))。108C2(12).设有二维数组A[0‥9,0‥19],其每个元素占两个字节,数组按列优先顺序存储,第一个元素的存储地址为100,那么元素A[6,6]的存储地址为(232)。112B1(13).在一棵二叉排序树上按(中序)遍历得到的结点序列是一个有序序列。111C3(14).对于一棵具有n个结点的二叉树,当进行链接存储时,其二叉链表中的指针域的总数为2n个,其中(n-1)个用于链接孩子结点。112B2(15).对于下面的二叉树,按后序遍历得到的结点序列为(4,2,5,6,3,1)。123456115B1(16).设无向图G的顶点数为n,图G最少有(0)边。117C3(17).对下列图162534它的生成树有(6)棵。118C3(18).假定在有序表R[0‥19]上进行二分查找,则比较三次查找成功的结点数为(4)。120D3(19).设有两个散列函数H1(K)=Kmod13和H2(K)=Kmod11+1,散列表为T[0‥12],用双重散列法(又称二次散列法)解决冲突。函数H1用来计算散列地址,当发生冲突时,H2作为计算下一个探测地址的地址增量。假定某一时刻散列表T的状态为:0123456789101112T:805534下一个被插入的关键码为42,其插入位置是(0)。122C3(20).已知一棵二叉排序树如下图所示,则在查找成功的情况下查找每个元素的平均查找长度为(2.75)。80509040701006075
三、完形填空题102D2(1).设顺序存储的线性表存储结构定义为:structsequnce{ELEMTPelem[MAXSIZE];intlen;/*线性表长度域*/}将下列简单插入算法补充完整。voidinsert(structsequnce*p,inti,ELEMTPx){v=*p;if(i<1)||(i>v.len+1)printf(“Overflow“);else{for(j=v.len;j>=i;j--)v.elem[j+1]=v.elem[j];v.elem[i]=x;v.len=v.len+1;}}103D3(2).设线性链表的存储结构如下:structnode{ELEMTPdata;/*数据域*/structnode*next;/*指针域*/}试完成下列在链表中值为x的结点前插入一个值为y的新结点。如果x值不存在,则把新结点插在表尾的算法。voidinserty(structnode*head,ELEMTPx,ELEMTPy){s=(structnode*)malloc(sizeof(structnode));s->data=y;if(head->data==x){s->nexr=head;head=s;}else{q=head;p=q->next;while(p->dqta!=x&&p->next!=NULL){q=p;p=p->next;}if(p->data==x){q->next=s;s->next=p;}else{p->next=s;s->next=NULL;}}}103D3(3).设线性链表的存储结构如下:structnode{ELEMTPdata;/*数据域*/structnode*next;/*指针域*/}试完成下列建立单链表的算法。creat(){charvar;head=(structnode*)malloc(sizeof(structnode));head->next=NULL;while((var=getchar())!=‘\n’){ptr=(structnode*)malloc(sizeof(structnode));ptr->data=var;ptr->next=head->next;head->next=ptr;}}103D3(4).下列算法将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同,试完成该算法。voidDelSameNode(LinkListL)//L是带头结点的单链表,删除其中的值重复的结点//{ListNode*p,*q,*r;p=L->next;//p初始指向开始结点//while(p){//处理当前结点p//q=p;r=q->next;do{//删除与结点*p的值相同的结点//while(r&&r->data!=p->data){q=r;r=r->next;}if(r){//结点*r的值与*p的值相同,删除*r//q->next=r->next;free(r);r=q->next;}}while(r);p=p->next;}}106D3(5)假设以带头结点的循环链表表示队列,并且只设一个指针R指向队尾元素结点(注意不设头指针),下列为出队一个元素的算法。DeList(R,e)LinkList*R,p;ElemTypee;{p=R->next->next;e=p->data;R->next->next=p->next;if(p==R)R=R->next;free(p);}105D3(6).链队列的存储结构为:structnodetype{ELEMTPdata;structnodetype*next;}structlinkqueue{structnodetype*front,*rear;}/*front和rear分别为队列的头指针和尾指针*/完成下列删除队头元素的算法。delq(structlinkqueue*r,ELEMTP*x){q=*r;if(q.front==q.rear)printf(“QUEUEISEMPTY\n“);else{p=q.front->next;q.front->next=p->next;if(p->next==NULL)q.rear=q.front;*x=p->data;free(p);}111D3(7).下面算法实现,用一棵二叉树中的结点建立一个按关键字值从小到大次序排列的带表头结点的双向循环链表。二叉树的结点结构如下所示:leftkeyright其中,p是指向结点的指针;p->key表示结点的关键字域,p->left和p->right分别表示结点的左、右孩子的指针域。voidfromtreetolist(p,l)/*p,h是指向二叉树中结点的指针,*//*l是指向双向循环链表表头结点的指针*/{if(p!=NULL){fromtreetolist(p->left,l);fromtreetolist(p->right,l);h=l;while(h->right!=l)&&(h->right->key<p->key)h=h->right;p->right=h->right;p->left=h;h->right->left=p;h->rihght=p;}}voidbuildlisttree(root,l)/*root是指向二叉树根结点的指针,*//*l是指向双向循环链表表头结点的指针*/{l=(structnodetype*)malloc(sizeof(structnodetype));l->left=l;l->right=l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 超神数学-高考数学总复习拔高篇(二轮)专题2周期函数与类周期函数(含答案或解析)
- 房地产行业报告:百强房企拿地优于去年市场延续分化
- 部编版语文五年级下册《习作-神奇的探险之旅》课件
- PEEK行业深度:“机器人浪潮”下的特种塑料“弄潮儿”
- 2025年农业灌溉用水高效利用的节水灌溉设备市场分析报告
- 新零售时代下的连锁药店扩张路径与数字化运营模式研究报告
- 汽车行业供应链全球化背景下的韧性构建与风险管理报告
- 大数据与社交媒体融合的2025年精准营销策略研究报告
- 金融行业2025年反欺诈技术革新与大数据融合应用报告
- 2025年多式联运信息平台物流企业国际化发展与拓展报告
- 特种设备日管控、周排查、月调度模板
- 儿童脓毒血症护理
- DB14∕T 1049.4-2021 山西省用水定额 第4部分:居民生活用水定额
- 《大学计算机基础案例教程(微课版)第2版》全套教学课件
- 《篮球移动技术 行进间传球》教案(共三篇)
- 透析患者并发癫痫的护理
- 教育培训机构合作培训协议
- 食堂食材配送采购 投标方案(技术方案)
- 《基础分子生物学》复习题及参考答案
- 贵州遵义四中2022自主招生物理试卷试题真题(含答案)
- 生物实验用试剂与耗材购销协议
评论
0/150
提交评论