1、(1) 算法的时间复杂度要通过算法中的基本语句的执行次数来确定 f。数量级(2) 每种数据结构都具备三个基本操作:插入,删除和查找。F 算法的三种基本操作(3) 所谓数据的逻辑结构指的是数据之间的逻辑关系。F 的整体 (4) 逻辑结构与数据元素本身的内容和形式无关。T (5) 基于某种逻辑结构之上的基本操作其实现是惟一的。F 以其存储结构决定的4. 分析以下各程序段,并用大O记号表示其执行时间。(1) i=1; k=0 ; while(in-1) k=k+10*i ; i+ ; O(n)(2) i=l; k=0 ; do while (i=n) ;(3) i=l; j=0 ; while(i+
2、jj) j+ ; else o(n) (4) y=0 ; while (y+1)*(y+1) y=y+l ;O(n1/2)(5) for ( i=1; i=n; i+ ) for ( j=1; j=i; j+ ) for (k=1; knext=p-next;p-next=s; B q-s-next=p; C p-next=s- D p-next=q;(12) 在循环双链表的p所指结点后插入s所指结点的操作是( D )。 A p-prior=P;next-prior=s; B p-next=s; p-prior=s; s-prior=p ; C s-prior=p;next=s ;prior=
3、s ; D s -next ;prior=s ;(13) 下面哪个特点不是线性表顺序存储结构的优点 DA. 可以方便地随机存取线性表中任一个数据元素B. 存取任一数据元素所花费的时间相同C. 存储空间连续,不必增加额外存储空间来保存前驱或后继元素的地址D. 插入或删除数据元素的操作方便(14) 下面哪个特点不是线性表顺序存储结构的缺点 BA. 插入数据元素的操作平均花费时间较多B. 存取数据元素所花费的时间较多C. 线性表的容量难于扩充D. 删除数据元素的操作平均花费时间较多(15) 指出下面不正确的说法 BA. 在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上不相邻。B. 线性表的
4、链式存储结构比线性存储结构所占的存储空间少。C. 在线性表的链式存储结构中存储器的碎片可得到充分利用D. 线性表的链式存储结构只能顺序存取数据元素,不能随机存取数据元素(1) 线性表的逻辑顺序和存储顺序总是一致的。F(2) 线性表的顺序存储结构优于链接存储结构。(3) 设p,q是指针,若p=q,则*p=*q。(4) 线性结构的基本特征是:每个元素有且仅有一个直接前驱和一个直接后继。F头元素没有前驱,最后没有后继(5) 单链表中,要取得某个元素,只要知道该元素所在结点的地址即可,因此单链表是随机存取结构。F 单列表是顺序存储结构参考答案(1) A ,B (2) D 线性表的链接存储是用一组任意的
5、存储单元存储线性表的数据元索,这组存储单元可以连续,也可以不连续,甚至可以零散分布在内存中任意位置。(3) B (4) A (5) A 【分析】线性表中最常用的操作是取第i个元素,所以,应选择随机存取结构,即顺序表,同时在顺序表中查找第i个元素的前趋也很方便。单链表和单循环链表既不能实现随机存取,查找第i个元素的前趋也不方便,双链表虽然能快速查找第i个元素的前趋,但不能实现随机存取。(6) D 【分析】在链表中的最后一个结点之后插入一个结点要知道终端结点的地址,所以,单链表、带头指针的单循环链表、双链表都不合适,考虑在带尾指针的单循环链表中删除第一个结点,其时间性能是O(1),所以,答案是D。
6、 (7) B 【分析】在链表中的最后一个结点之后插入一个结点要知道终端结点的地址,所以,单链表、单循环链表都不合适,删除最后一个结点要知道终端结点的前驱结点的地址,所以,带尾指针的单循环链表不合适,而循环双链表满足条件。(8) B 【分析】首先应顺序查找新结点在单链表中的位置。(9) C 【分析】该算法要将n个元素依次插入到有序单链表中,而插入每个元素需O(n)。(10) B 【分析】在链表中一般只能进行顺序查找,所以,双链表并不能提高查找速度,因为双链表中有两个指针域,显然不能节约存储空间,对于动态存储分配,回收存储空间的速度是一样的。由于双链表具有对称性,所以,其插入和删除操作更加方便。(
7、11) B 【分析】注意此题是在q和p之间插入新结点,所以,不用考虑修改指针的顺序。(12) D 【分析】在链表中,对指针的修改必须保持线性表的逻辑关系,否则,将违背线性表的逻辑特征,图2-3给出备选答案C和D的图解。图 2-3 双链表插入操作修改指针操作示意图(13) D (14) B (15) B顺序表的逻辑顺序和存储顺序一致,链表的逻辑顺序和存储顺序不一定一致。两种存储结构各有优缺点。p=q只能表示p和q指向同一起始地址,而所指类型则不一定相同。 (4) 错。每个元素最多只有一个直接前驱和一个直接后继,第一个元素没有前驱,最后一个元素没有后继。 (5) 错。要找到该结点的地址,必须从头指
8、针开始查找,所以单链表是顺序存取结构。第3章 栈 和 队 列(1) 若一个栈的输入序列是l,2,3,n,输出序列的第一个元素是n, 则第i个输出元素是( D )。 A 不确定 B n-i C n-i-l D n-i+1(2) 设栈s和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次通过栈s,一个元素出栈后即进入队列Q,若6个元素出队的顺序是e2,e4,e3,e6,e5,e1,则栈S的容量至少应该是( C )。 A 6 B 4 C 3 D 2(3) 一个栈的入栈序列是1,2,3,4,5,则栈的不可能的输出序列是( C )。 A 5,4,3,2,1 B 4,5,3,2,1 C 4,
9、3,5,1,2 D 1,2,3,4,5(4) 设计一个判别表达式中左右括号是否配对的算法,采用( B )数据结构最佳。 A 顺序表 B 栈 C 队列 D 链表(5) 在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印缓冲区,该缓冲区应该是一个( B )结构。 A 栈 B 队列 C 数组 D 线性表(6) 一个队列的入队顺序是1,2,3,4,则队列的输出顺序是( B )。 A 4,3,2,1 B 1,2,3,4 C 1,4,3,2 D 3,2,4,1(7) 栈和队列的主要区别在于( D )。 A 它们的逻辑结构不一样 B 它们的存储结构不一样 C 所包含的运算不一样 D 插入、删除运算
10、的限定不一样(8) 设数组Sn作为两个栈S1和S2的存储空间,对任何一个栈只有当Sn全满时才不能进行进栈操作。为这两个栈分配空间的最佳方案是( A )。 A S1的栈底位置为0,S2的栈底位置为n-1 B S1的栈底位置为0,S2的栈底位置为n/2 C S1的栈底位置为0,S2的栈底位置为n D S1的栈底位置为0,S2的栈底位置为1(9) 指出下面有关栈和队列的不正确说法。 DA. 从逻辑结构角度来看,栈和队列是线性表B. 从操作角度来看,栈和队列的基本操作是线性表操作的子集C. 对于进栈和出栈操作都是在栈顶一端进行D. 对于队列操作而言,是在队头进队,在队尾出队(10) 如果进栈的数据元素
11、序列为1、2、3、4、5、6,不能得到的出栈序列是D A. 1、2、3、4、5、6 B. 6、5、4、3、2、1 C. 3、2、1、4、5、6 D. 4、3、5、6、1、2(11) 一个栈的进栈序列是a, b, c, d, e ,则栈的不可能的输出序列是 CA. edcba B.decba C. dceab D. abcde(12) 若已知一个栈的进栈序列是1,2,3,n,其输出序列为p1,p2,p3,pn,若p1=3 ,则p2为 A A.可能是2 B.一定是2 C. 可能是1 D.一定是1(13) 若循环队列用数组A0, m-1存放其元素值,已知其头尾指针分别是front和rear,则当前队
12、列中的元素个数是 AA . (rear front + m) % m B. rear-front+1 C. rear-front-1 D. rear-front(1) 有n个元素依次进栈, 则出栈序列有(n-1)/2种。 F(2) 栈可以作为实现过程调用的一种数据结构。 T(3) 在栈满的情况下不能做进栈操作, 否则将产生“上溢”。(4) 在循环队列中,front指向队头元素的前一个位置,rear指向队尾元素的位置,则队满的条件是front=rear。4. 设有一个栈元素进栈的次序为A, B,C,D,E,能否得到如下出栈序列。若能,请写出操作序列,若不能,请说明原因。 (1) C,E, A,
13、B,D 不能 (2) C,B, A, D, E 能5举例说明顺序队列的“假溢出”现象。6. 在操作序列push(1)、push(2)、pop、push(5)、push(7)、pop、push(6)之后,栈顶元素和栈底元素分别是什么?(push(k)表示整数k入栈,pop表示栈顶元素出栈。) (分段图示说明)(1) D 【分析】此时,输出序列一定是输入序列的逆序。(2) C 【分析】由于队列具有先进先出性,所以,此题中队列形同虚设,即出栈的顺序也是e2,e4,e3,e6,e5,e1。(3) C 【分析】此题有一个技巧:在输出序列中任意元素后面不能出现比该元素小并且是升序(指的是元素的序号)的两个
14、元素。(4) B 【分析】每个右括号与它前面的最后一个没有匹配的左括号配对,因此具有后进先出性。(5) B 【分析】先进入打印缓冲区的文件先被打印,因此具有先进先出性。(6) B 【分析】队列的入队顺序和出队顺序总是一致的。(7) D 【分析】栈和队列的逻辑结构都是线性的,都有顺序存储和链接存储,有可能包含的运算不一样,但不是主要区别,任何数据结构在针对具体问题时包含的运算都可能不同。(8) A 【分析】两栈共享空间首先两个栈是相向增长的,栈底应该分别指向两个栈中的第一个元素的位置,并注意c+中的数组下标是从0开始的。(9) D (10) D (11) C (12) A (13) A(1) 错
15、。应该有 (2n)!/(n+1)(n!)2) 种。(2) 对。只要操作满足后进先出性,都可以采用栈作为辅助数据结构。(3) 对。(4) 错。这是队空的判定条件, 在循环队列中要将队空和队满的判定条件区别开。4. (1) 不能。因为在C,E出栈的情况下,A一定在栈中,而且在B的下面,不可能先于B出栈。(2) 可以。设I为进栈操作,O为出栈操作则其操作序列为IIIOOOIOIO。5假设有一个顺序队列,如图3-1所示,队尾 指针rear=4 ,队头指针front=1,如果再有元素入队,就会产生“上溢”,此时的”上溢”又称为“假溢出”,因为队列并不是真的溢出了, 存储队列的数组中还有2个存储单元空闲,
16、其下标分别为0和l。图 3-1 顺序队列的假溢出6. 栈顶元素为6,栈底元素为1。其执行过程如图3-2所示。图3-2 栈的执行过程示意图第 4 章 串 (1) 串是一种特殊的线性表, 其特殊性体现在( 数据元素的类型是一个字符 )。(2) 两个串相等的充分必要条件是( 长度相同且对应位置的字符相同 )。(3) 串的静态存储结构,即顺序存储结构,其有( 紧凑格式 )和( 非紧凑格式 )两种存储方式。(4) 串的链式存储结构有( 链式存储结构 )和( 堆结构 )两种存储方式。(1) 空串与空格串是相同的。(2) 如果一个串中的所有字符均在另一个串中出现,那么则说明前者是后者的子串。1填空题:(1)
17、 数据元素的类型是一个字符(2) 长度相同且对应位置的字符相等 【分析】例如abcabc ,bca。(3) 紧凑格式 非紧凑格式(4) 链式存储结构 堆结构 3判断题:(1) 错。空串的长度为零,而空格串的长度不为0,其长度是串中空格的个数.(2) 错第5章 数组和广义表(1) 数组通常只有两种运算:( 给定下标,存取相应元素 )和( 给定下标,修改相应的元素 ),这决定了数组通常采用( 顺序存储 )结构来实现存储。(2) 二维数组A中行下标从10到20,列下标从5到10,按行优先存储,每个元素占4个存储单元。A105的存储地址是1000,则元索A1510的存储地址是( 1140 )。(3)
18、设有一个10阶的对称矩阵A采用压缩存储,A00为第一个元素,其存储地址为d,每个元素占1个存储单元,则元素A85的存储地址为( d+41 )。(4) ( 三元组线性表 )是稀疏矩阵压缩存储方法之一。(5) 广义表(a),(b),c),(d)的长度是( 3 ),深度是( 4 ),表头是( (a) ),表尾是( ( (b),c),(d) ) )。(6) 已知广义表LS = (a,(b,c,d),e),用Head和Tail函数取出LS中原子b的运算是( Head(Head(Tail(LS) )。(7) 存储n维数组的存储规则是,以行为主序的存储可以规定为 ( 最右的下标优先 ,从右向左 );以列为主
19、序的存储可以规定为( 最左的下标优先,从左到右 )。(8) 矩阵的压缩存储是指( 对多个值相同的元素只分配一个存储空间且对零元素不分配存储空间 )(9) 设有二维数组A(6*8),每个元素占6个字节存储,实现存放,A00的起始地址为1000,则数组A的存储量为( 288 ),按行优先存放时,元素A14的起始地址是( 1072 )。(10) HEAD (a,b) , (c,d) 的值是 ( (a,b) , (c,d) ) 。(11) HEAD (TAIL(a,b) , (c,d) 的值是( (c,d) ) 。(12) 设对称矩阵R压缩存储为一维数组,则元素R32对应一维数据的下标为 ( 8 )
20、。 (1) 数组是一种复杂的数据结构,数组元素之间的关系既不是线性的,也不是树形的。 (2) 使用三元组表存储稀疏矩阵的元素,有时并不能节省存储空间。T (3) 稀疏矩阵压缩存储后,必会失去随机存取功能。 (4) 线性表可以看成是广义表的特例,如果广义表中的每个元素都是原子元素,则广义表便成为线性表。 (5) 若一个广义表的表头为空表,则此广义表也为空表。4一个稀疏矩阵如图5-1所示,写出对应的三元组顺序表存储表示。及C 语言描述的存储结构定义图 5-1 稀疏矩阵(1) 给定下标,存取相应的数据元素;给定下标,修改相应的数据元素;顺序存储 【分析】数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。除了初始化和销毁之外,在数组中通常只有存取和修改两种操作。 (2) 1140 【分析】数组A中每行共有6个元素,元素A1 510的前面共存储了(15-10)6+5个元素,每个元素占4个存储单元,所以,其存储地址是1000+140=1140。 (3) d+4l 【分析】元素A85的前面共存储了(1+2+8)+5=41个元素。 (4) 三元组线性表 (5) 3,4,(a),(b),c),(d) (6) Head(Head(Tail(LS) (7) 最右的下标优先 ,从右向左 ; 最左的下标优先,从左到右(8) 为多个值相同的元只分配一个存储空间且对零元不分配空间
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1