1第一章概论一、填空题1、数据的存储结构可用四种基本的存储方法表示,分别是顺序、链式、索引和散列。2、一个算法具有有穷性、确定性、可行性,有零个或多个输入、有一个或多个输出5个特性。3、数据结构包括数据的逻辑结构、存储结构和运算(或基本操作)三个方面的内容。4、数据结构中评价算法的两个重要指标是时间效率和空间效率。7、数据项是数据中不可再分割的最小单位;数据元素是数据集合中的一个“个体”,是计算机程序中加工处理的基本单位。8、健壮性指算法对非法输入能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。9、下列语句的时间复杂度是O(n2)for(i=1;i=n;i++)for(j=1;j=n;j++){++x;}二、单项选择题1、数据结构中,与所使用的计算机无关的是数据的(C)结构。A、存储B、物理C、逻辑D、物理和存储2、算法分析的目的是(C)。A、找出数据结构的合理性B、研究算法中的输入和输出的关系C、分析算法的效率以求改进D、分析算法的易懂性和文档性3、计算机算法指的是(C)。A、计算方法B、排序方法C、解决问题的有限运算序列D、调度方法4、计算机算法必须具备输入、输出和(B)等5个特性。A、可行性、可移植性和可扩充性B、可行性、确定性和有穷性C、确定性、有穷性和稳定性D、易读性、稳定性和安全性5、从逻辑上可以把数据结构分为(C)两大类。A、动态结构、静态结构B、顺序结构、链式结构C、线性结构、非线性结构D、初等结构、构造型结构6、下列数据中,(C)是非线性数据结构。A、栈B、队列C、完全二叉树D、堆7、算法分析的两个主要方面是(A)。A、空间复杂性和时间复杂性B、正确性和简明性2C、可读性和文档性D、数据复杂性和程序复杂性8、在下面程序段的时间复杂度(D)。i=1;while(i=n)i=i*3;A、O(3n)B、O(n)C、O(n3)D、O(log3n)9、在下面的程序段中,对x的赋值语句的频度为(C)。for(i=1;i=n;i++)for(j=1;j=n;j++)x=x+1;A、O(2n)B、O(n)C、O(n2)D、O(log2n)10、下面关于算法说法错误的是(D)。A、算法最终必须由计算机程序实现B、为解决某问题的算法同为该问题编写的程序含义是相同的C、算法的可行性是指指令不能有二义性D、以上几个都是错误的三、判断题1、数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的储存结构.(×)2、数据的逻辑结构是指数据的各数据项之间的逻辑关系;(×)3、数据的物理结构是指数据在计算机内的实际存储形式。(√)4、算法的优劣与算法描述语言无关,但与所用计算机有关。(×)5、健壮的算法不会因非法的输入数据而出现莫名其妙的状态。(√)6、算法可以用不同的语言描述,如果用C语言或PASCAL语言等高级语言来描述,则算法实际上就是程序了。(×)7、数据元素是数据中不可再分割的最小单位。(×)8、算法中的每一步,必须有确切的含义,不能产生理解上的二义性。(√)9、采用事后统计法进行算法分析时,不会因为软硬件环境的改变而影响分析结果。(×)10、算法的时间与空间效率是指将算法变换为程序后,该程序在计算机上运行时所花费的时间及所占据空间的度量。(√)3第2章线性表一、填空1、当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用顺序存储结构。2、顺序存储的线性表存储结构的特点是:用物理位置的相邻表示元素之间的关系的,在顺序表中插入或删除一个元素,移动的元素个数与表长和该元素在表中的位置有关。3、设单链表的结点结构为(data,next),next为指针域,指针p指向单链表中data为x的结点,指针q指向data为y的新结点,若将结点y插入结点x之后,则需要依次执行以下语句:__q-next=p-next;_p-next=q4、在顺序表中访问任意一结点的时间复杂度均为O(1),因此,顺序表也称为随机存取的数据结构。5、链式存储结构的特点是利用__指针来表示数据元素之间的逻辑关系。在单链表中,除了首元结点外,任一结点的存储位置由其直接前驱结点的链域的值指示,查找结点都必须从头结点开始,因此,链表也称为顺序存取的数据结构。6、已知指针p指向单链表L中的某结点,u是P的直接后继,删除u的语句是:p-next=u-next;free(u);7、带头结点的双循环链表L中只有一个元素结点的条件是:L-next-next==L;8、在顺序表L=(a1,a2,…,an)中,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是(n-1)/2_;第i个元素(1=i=n)之前插入一个元素时,需向后移动n-i+1_个元素。如果要在第1个元素前插入一个元素,要后移n个元素;删除第i个元素(1≤i≤n)时,需向前移动n-i个元素。9、在n个结点的单链表中要删除已知结点*p,需找到它的前驱结点的地址,其时间复杂度为O(n),在给定值为x的结点后插入一个新结点的时间复杂度为O(n)_。10、在非空的线性表中,有且仅有一个没有直接前趋的开始结点a1;有且仅有一个没有直接后继的终端结点an;其余的内部结点ai(2≤i≤n-1)都有且仅有一个直接前趋ai-1和一个直接后继ai+1。11、双向链表结构的对称性可用下式描述:p-prior)-next=p=(p-next)-prior二、判断正误1、线性表的特点是每个元素都有一个前驱和一个后继。(×)2、链表的物理存储结构具有同链表一样的顺序。(×)3、链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元4向前移动。(×)4、取线性表的第i个元素的时间同i的大小有关。(×)5、顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。(×)6、顺序存储方式的优点是存储密度大,且插入、删除运算效率高。(×)7、链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序存储结构中效率高。(√)8、线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。(×)9、顺序存储方式只能用于存储线性结构。(×)10、线性表的逻辑顺序与存储顺序总是一致的。(×)11、链表中的头结点仅起到标识的作用。(×)12、顺序存储结构的主要缺点是不利于插入或删除操作。(√)13、线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。(√)14、顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。(×)15、对任何数据结构链式存储结构一定优于顺序存储结构。(×)16、顺序存储的线性表,优点是空间利用率很高。(×)17、在单链表上插入、删除一个结点,必须知道其前驱结点。(√)18、遍历操作时,循环链表和非循环链表的终止条件判断是一样的。(×)19、顺序表能按元素序号随机访问,而链表只能顺序查找。(√)20、在顺序表中做插入删除操作时,平均移动大约表中一半的元素,因此对n较大的顺序表效率低。(√)三、单项选择题1、数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为(C)。A、存储结构B、逻辑结构C、顺序存储结构D、链式存储结构2、一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(B)A、110B、108C、100D、1203、在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是(A)。A、访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)B、在第i个结点后插入一个新结点(1≤i≤n)C、删除第i个结点(1≤i≤n)D、将n个结点从小到大排序4、向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动(B)个元素。A、8B、63.5C、63D、75、线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为(C)。5A、O(i)B、O(1)C、O(n)D、O(i-1)6、链表是一种采用(B)存储结构存储的线性表。A、顺序B、链式C、星式D、网状7、线性表若采用链式存储结构时,要求内存中可用存储单元的地址(D)。A、必须是连续的B、部分地址必须是连续的C、一定是不连续的D、连续或不连续都可以8、线性表L在(B)情况下适用于使用链式结构实现。A、需经常修改L中的结点值B、需不断对L进行删除插入C、L中含有大量的结点D、L中结点结构复杂9、单链表的存储密度(C)。A、大于1B、等于1C、小于1D、不能确定10、对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是(B)A、head==NULLB、head→next==NULLC、head→ext==headD、head!=NULL11、下面关于线性表的叙述中,错误的是哪一个?(B)A、线性表采用顺序存储,必须占用一片连续的存储单元。B、线性表采用顺序存储,便于进行插入和删除操作。C、线性表采用链接存储,不必占用一片连续的存储单元。D、线性表采用链接存储,便于插入和删除操作。12、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(D)存储方式最节省运算时间。A、单链表B、仅有头指针的单循环链表C、双链表D、仅有尾指针的单循环链表13、链表不具有的特点是(B)。A、插入、删除不需要移动元素B、可随机访问任一元素C、不必事先估计存储空间D、所需空间与线性长度成正比14、设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用(D)最节省时间。A、单链表B、单循环链表C、带尾指针的单循环链表D、带头结点的双循环链表15、若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为(C)(1=i=n+1)。A、O(0)B、O(1)C、O(n)D、O(n2)16、下述(A)是顺序存储结构的优点。A、存储密度大B、插入运算方便C、删除运算方便D、可方便地用于各种逻辑结构的存储表示17、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是(B)。A、p-next=s;s-next=p-next;B、s-next=p-next;p-next=s;6C、p-next=s;p-next=s-next;D、p-next=s-next;p-next=s;18、线性表是具有n个(C)的有限序列(n0)。A、表元素B、字符C、数据元素D、数据项19、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(A)存储方式最节省时间。A、顺序表B、双链表C、带头结点的双循环链表D、单循环链表20、在双向链表指针p的结点前插入一个指针q的结点操作是(C)。A、p-prior=q;q-next=p;p-prior-next=q;q-prior=q;B、p-prior=q;p-prior-next=q;q-next=p;q-prior=p-prior;C、q-next=p;q-prior=p-prior;p-prior-next=q;p-prior=q;D、q-prior=p-prior;q-next=q;p-prior=q;p-prior=q;21、若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用(D)存储方式最节省时间。A、单链表B、双链表C、单向循环D、顺序表22、链表不具有的特点是(B)A、插入、删除不需要移动元素B、可随机访问任一元素C、不必事先估计存储空间D、所需空间与线性长度成正比23、对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为(C)。A、O(n)O(n)B.O(n)O(1)C、O(1)O(n)D.O(1)O(1)24、对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是(B)A、head==NULLB、head→next==NULLC、head→next==headD、head!=NULL25、在双向链表存储结构中,删除p所