复习.docx
- 文档编号:10598475
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:43
- 大小:160.55KB
复习.docx
《复习.docx》由会员分享,可在线阅读,更多相关《复习.docx(43页珍藏版)》请在冰豆网上搜索。
复习
绪论、线性表
一、判断题
1.顺序表和一维数组一样,都可以按下标随机(或直接)访问。
(√)
2.数据的逻辑结构是指各数据元素之间的逻辑关系,是用户根据应用需要建立的。
(√)
3.只有用面向对象的计算机语言才能描述数据结构算法。
(×)
4.在对双向循环链表做删除一个结点操作时,应先将被删除结点的前驱结点和后继结点链接好再执行删除结点操作。
(√)
5.数据元素是数据的最小单位。
(×)
6.算法和程序都应具有下面一些特征:
输入,输出,确定性,有穷性,可行性。
(√)
7.插入与删除操作是数据结构中最基本的两种操作,因此这两种操作在数组中也经常被使用。
(×)
8.线性表若采用链式存储表示,在删除时不需要移动元素。
(√)
9.用一组地址连续的存储单元存放的元素一定构成线性表。
(×)
10.线性表的逻辑顺序与物理顺序总是一致的。
(×)
11.线性表的顺序存储表示优于链式存储表示。
(×)
12.链表的每个结点中都恰好包含一个指针。
(×)
二、填空题
1.若经常需要对线性表进行查找操作,则最好采用___顺序_____存储结构。
2.____循环____链表从任何一个结点出发,都能访问到所有结点。
3.若经常需要对线性表进行插入与删除操作,该线性表最好采用__链式______存储结构。
4.通常用时间复杂度和___空间复杂度_____两种方法衡量算法的效率
5.已知一顺序存储的线性表,每个元素占用k个存储单元,若第一个元素的地址为Loc1,则第i个元素的地址为__Loc1+(i-1)*k______________。
6.在以L为头指针的带头结点的单链表和单循环链表中,判断链表是否为空的条件分别为_L->next==NULL和_L->next==L________。
7.顺序表中逻辑上相邻的元素的物理位置____相邻____,单链表中逻辑上相邻的元素的物理位置___不一定相邻_____。
8.数据的逻辑结构包括集合、___线性结构_____、树形结构和图状结构四种类型。
9.已知有实现同一功能的两个算法,其时间复杂度分别为O(log2n)和O(n),哪个算法的效率更高?
__O(log2n)______
10.在一个单链表L中,若要在指针q所指结点的后面插入一个由指针p所指向的结点,则应进行的操作序列为:
___p->next=q->next_____________,q一>next=p。
11.在单链表设置表头结点的作用是插入和删除表中第一个元素时不必对__头指针______进行特殊处理。
12.在双向链表中,每个结点含有两个指针域,一个指向__直接前驱______结点,另一个指向_直接后继____结点。
13.在非空线性表中除第一个元素外,集合中每个数据元素只有一个____直接前驱_____;除最后一个元素之外,集合中每个数据元素均只有一个___直接后继_______。
14.一个算法一该具有有穷性,___确定性______,可行性,输入和输出这五种特性。
15.
三、选择题
1.计算机识别、存储和加工处理的对象被统称为_____A___。
A.数据B.数据元素C.数据结构D.数据类型
2.线性表若采用链式存储结构时,要求内存中可用存储单元的地址__D______。
A.必须是连续的B.部分地址必须是连续的
C.一定是不连续的D.连续,不连续都可以
3.线性表若采用顺序存储结构时,要求内存中可用存储单元的地址__A______。
A.必须是连续的B.部分地址必须是连续的
C.一定是不连续的D.连续,不连续都可以
4.在一个长度为n的顺序存储的线性表中,向第i个元素(1≤i≤n+1)位置之前插入一个新元素时,需要移动___B_____个元素。
A.n-iB.n-i+1C.n-i-1D.i
5.在长度为n的顺序存储的线性表中,删除第i个元素(1≤i≤n)时,需要从前向后依次前移____A____个元素。
A.n-iB.n-i+1
C.n-i-1D.i
6.链表不具有的特点是____A____。
A.随机访问B.不必事先估计所需存储空间大小
C.插入与删除时不必移动元素D.所需空间与线性表长度成正比
7.在一个单链表L中,若要删除由指针q所指向结点的后继结点,则执行____D____。
A.q=q->next;B.q->next=p->next;
C.p=q->next;D.q->next=q->next->next;
8.在一个单链表HL中,若要删除由指针q所指向结点的后继结点,则执行__B___。
A.p=q->next;p->next=q->next;B.p=q->next;q->next=p->next;
C.p=q->next;q->next=p;D.q->next=q->next->next;q->next=q;
9.在一个长度为n的顺序存储线性表中,删除第i个元素(1≤i≤n)时,需要移动____A____个元素。
A.n-iB.n-i+1C.n-i-1D.i
10.下面算法的时间复杂度为______B______。
intf(unsignedintn){
if(n==0||n==1)return1;elsereturnn*f(n-1);
}
A.O
(1)B.O(n)
C.O(n2)D.O(n!
)
11.下面程序段的时间复杂度为_______C_____。
for(inti=0;i for(intj=0;j A[i][j]=i*j; A.O(m2)B.O(n2)C.O(m*n)D.O(m+n) 12.数据结构通常是研究数据的A及它们之间的联系。 A存储和逻辑结构B存储和抽象 C理想和抽象D理想与逻辑 13.算法分析的目的是___B______ A、找出数据结构的合理性B、分析算法的效率以求改进、研究算法中的 C、输入和输出的关系D、分析算法的易懂性和文档性 14.算法分析的两个主要方面是: A A空间复杂性和时间复杂性B正确性和简明性 C可读性和文档性D数据复杂性和程序复杂 15.线性表L在B情况下适用于使用链式结构实现。 A需经常修改L中的结点值B需不断对L进行删除插入 CL中含有大量的结点DL中结点结构复杂 16. 四、程序题 typedefstructLNode{ intdata; structLNode*next; }LNode,*LinkList; 1.将下面算法填完整。 voidListInsert_L(nodeL,inti,elementtypex) {LinkListp=L,s;intk=0; while( && ) { ;k++;} if(! p||j>i-1)returnERROR; s=(LinkList)malloc(sizeof(node)); s->data=x; ; ;} 1.P k p=p->next s->next=p->next; p->next=s; 2.简述下面算法的功能 voidAC(LinkList&L){ //L为一个无头结点的单链表 if(L&&L->next){ q=L;L=L->next;p=L; while(p->next)p=p->next; p->next=q;q->next=NULL; } } 将该单链表的表头元素移到表尾 3.简述下面算法的功能 voidAE(LNode*s,LNode*q){ p=s; while(p->next! =q)p=p->next; p->next=s; } voidAD(LNode*pa,LNode*pb){ //pa和pb分别指向单循环链表中的两个结点 AE(pa,pb); AE(pb,pa); } 将一个单循环链表拆分成两个单循环链表(指针pa和pb分别指向这两个单循环链表中的某两个节点) 4.下列算法为删除带头结点的单链表head中值为x的算法,将程序填完整(每空2分) 已知结构体: typedefstructLNode{ ElemTypedata; structLNode*next; }LNode,*LinkList; voiddel(LinkListhead) {q=head; ; while(p&&)) {q=p; _________;} if(p==null)printf(“error”); else {______________; free(p);printf(“success! ”);} } p=q->next p->data! =x p=p->next q->next=p->next 5.下列算法为删除单链表中值为X的算法,将程序填完整(4分,每空2分) 已知结构体: structnode{ ElemTypedata; structLNode*next; }; voiddel(structnode*head) {q=head; p=q->next; while((p)&&(p->data! =x)) {q=p; ______;} if(p==null)printf(“error”); else{______; free(p);printf(“success! ”);}} p=q->next q->nex=p->next 6.下列算法为利用尾插法,建立一个单链表,将程序填完整程序 voidCreateList(LinkList&L,intn){ LinkListr,p;inti; L=(LinkList)malloc(sizeof(node)); L->next=NULL; ; for(i=n;i>0;--i){ p=(LinkList)malloc(sizeof(node)); scanf(“%c”,&p->data); ; r->next=p; ; }} r=L; p->next=NULL; r=p; 队栈串数组广义表 一、判断题: 1.递归的算法简单、易懂、容易编写,而且执行效率也高。 (f) 2.链式栈与顺序栈相比,一个明显的优点是通常不会出现栈满的情况。 (t) 3.堆栈、队列和数组的逻辑结构都是线性表结构。 (t) 4.单链表形式的队列,头指针F指向队列的第一个结点,尾指针R指向队列的最后一个结点(f) 5.若某堆栈的输入序列为1,2,3,4,则4,3,1,2不可能是堆栈的输出序列之一。 (t) 6.栈和队列都是限制取点的线性结构(t) 7.栈和队列都是顺序存取的线性表,但它们对存取位置的限制不同。 (t) 8.稀疏矩阵压缩存储后,必会失去随机存取功能。 (t) 9.如果两个串中含有相同的字符,则这两个串相等(f) 10.广义表的表头和表尾既可以是单元素,也可以是广义表。 (f) 二、填空题: 1.在初始为空的队列中插入元素A,B,C,D以后,紧接着做了两次删除操作,此时的队尾元素是___d_____。 2.已知循环队列的存储空间为数组a[21],且头指针(指向队头元素)和尾指针(队尾元素的下一位置)分别为8和3,则该队列的当前长度为___16_____。 3.栈结构允许进行删除操作的一端为__栈顶______。 4.队列又称为__先进先出______的线性表 5.对于顺序存储的队列,存储空间大小为n,头指针为F,尾指针为R。 若在逻辑上看一个环,则队列中元素的个数为___(r+n)-f________。 6.队列的特点是____先进先出___________________。 7.栈又称为先进后出的线性表,队列又称为先进先出的线性表。 8.设数组A[m]为循环队列Q的存储空间,font为头指针,rear为尾指针,判定Q为空队列的条件____front==rear________________。 9.设元素1,2,3,4,5依次进栈S,若要在输出端得到序列34251,则应进行的操作序列为: push(S,1),push(S,2),push(S,3),pop(S),push(S,4),pop(S),pop(S),push(S,5),pop(S),pop(S)。 10.一个串的任意个连续的字符组成的子序列称为该串的子串,包含该子序列的串称为主串,该子序列在串中的位置用子串的第一个字符在主串中的位置来表示。 11.在串的链式存储方式中,结点越大,运算处理越不方便(方便/不方便),存储占用量越小(大/小)。 12.求串T在主串S中首次出现的位置的操作是____模式匹配__________。 13.广义表(A,(a,b),d,e,((i,j),k)),则广义表的长度为5,深度为3,表头为A,表尾为((a,b),d,e,((i,j),k))。 14.已知广义表ls=(a,(b,c,d),e),运用head和tail函数取出ls中的原子b的运算是_head(head(tail(ls)))_。 15.设有二维数组A[5][6],其每个元素占两个存储单元,第一个元素的存储地址为1100,若按行优先顺序存储,则元素A[2][3]的存储地址为1130,按列优先顺序存储,元素A[2][3]的存储地址为1134。 16.设有二维数组A[9][19](下标从0开始),其每个元素占两个字节,第一个元素的存储地址为100,若按行优先顺序存储,按列优顺序存储,元素A[6,6]的存储地址为__220________。 17.设二维数组A[m][n]按列优先存储,每个元素占1个存储单元,元素A00的存储地址loc(A00),则Aij的存储地址loc(Aij)=_____loc(a00)+(j*m+i)*1____。 18. 三、选择题: 1.判定一个栈ST(最多元素为m0)为空的条件是___b______ A.ST->top<>0B.ST->top=0 C.ST->top<>m0D.ST->top=m0 2.链式栈与顺序栈相比,一个比较明显的优点是___b_____。 A.插入操作更加方便B.通常不会出现栈满的情况 C.不会出现栈空的情况D.删除操作更加方便 3.假定一个顺序队列的队首和队尾指针分别为front和rear,则判断队空的条件是__d______。 A.front+1==rearB.rear+1==frontC.front==0D.front==rea 4.队和栈的主要区别是__d______ A.逻辑结构不同B.存储结构不同 C.所包含的运算个数不同D.限定插入和删除的位置不同 5.假定利用数组a[N]循环顺序存储一个队列,用front(指向队首元素)和rear(指向队尾元素的下一位置)分别表示队首和队尾指针,并已知队列未空,当出队并返回队首元素时所执行的操作为__d____。 A.returna[++rear%N];B.returna[--rear%N]; C.returna[++front%N];D.returna[front++%N]; 6.入栈次序是a,b,c,d,e,则出栈次序不可能是___c_____。 A.e,d,c,b,aB.d,e,c,b,aC.d,c,e,a,bD.a,b,c,d,e 7.由两个栈共享一个向量空间的好处是___b___。 A减少存取时间,降低下溢发生的机率B节省存储空间,降低上溢发生的机率 C减少存取时间,降低上溢发生的机率D节省存储空间,降低下溢发生的机率 8.假定利用数组a[N]顺序存储一个栈,用top表示栈顶指针,top==0表示栈空,并已知栈未满,当元素x进栈时所执行的操作为___D___。 A.a[--top]=x;B.a[top--]=x;C.a[++top]=x;D.B.a[top++]=x; 9.假定利用数组a[N]顺序存储一个栈,用top表示栈顶指针,top==0表示栈空,并已知栈未空,当出栈并返回栈顶元素时所执行的操作为___A___。 A.returna[--top];B.returna[top--];C.returna[++top];D.returna[top++]; 10.假定一个循环顺序队列的队首和队尾指针分别为f和r,则判断队空的条件是__D___。 A.f+1==rB.r+1==f C.f==0D.f==r 11.若让元素1,2,3依次进栈,则出栈次序不可能出现___C___种情况。 A.3,2,1B.2,1,3C.3,1,2D.1,3,2 12.当利用大小为N的一维数组存储一个循环队列时,则该队列的最大长度为___B___。 A.N-2B.N-1C.ND.N+1 13.假定利用数组a[N]循环顺序存储一个队列,用front和rear分别表示队首和队尾指针,并已知队列未满,当元素x入队时所执行的操作为___B___。 A.a[++rear%N]=x;B.a[rear++%N]=x;C.a[--rear%N]=x;D.a[rear--%N]=x; 14.如下陈述中正确的是___A___。 A.串是一种特殊的线性表B.串的长度必须大于零 C.串中元素只能是字母D.两个串s1和s2若长度相同,则这两个串相等 15.如下陈述中正确的是___A___。 A.串是一种特殊的线性表B.串的长度必须大于零 C.串中元素只能是字母D.空串就是空白串 16.在以下的叙述中,正确的是___A___。 A.二维数组可以看做它的每个数据元素为一个线性表的线性表 B.栈的操作方式是先进先出 C.线性表的线性存储结构优于链表存储结构 D.队列的操作方式是先进后出。 17.一个非空广义表的表头___D___。 A.不可能是子表B.只能是子表 C.只能是原子D.可以是子表或原子 18.在目标串T[0…n-1]=”xwxxyxy”中,对模式串p[0…m-1]=”yy”进行子串定位操作的结果____A___ A.0B.2C.3D.5 19.数组A中,每个元素的长度为3字节,行下标从1到8,列下标从1到10,从首地址SA开始连续存放在存储器中,按行存放时,元素a[8][5]地址为(C) ASA+141BSA+180 CSA+222DSA+225 20.串是一种特殊的线性表,其特殊性体现在: B A.可以顺序存储B.数据元素只能来自字符集 C.可以链式存储D.数据元素可以是多个字符 21. 四、应用题: 1.假定用一维数组a[6]顺序存储一个循环队列,用front和rear分别表示队首指针(指向队列头元素)和队尾指针(指向队尾元素的下一位置),当前队列中已有5个元素: 23,45,67,80,34,其中23为队首元素,front的值为3,请画出对应的存储和首尾指针状态,当连续做3次出队操作后,再让元素15,36依次进队,请再次画出对应的存储和首尾指针状态。 2.已知稀疏矩阵如下: 请写出该稀疏矩阵三元组表示。 3.按表头表尾法,画出广义表LS=(((a),b),((),d),(e,f))的存储结构。 4.按表头表尾法,画出广义表 LS=((x,y,(a,b)),(z,(x,y,(a,b))))的链式存储结构,并写出该表的表头和表尾。 head(LS)=(x,y,(a,b)) tail(LS)=((z,(x,y,(a,b)))) 5.下图所示广义表的存储结构同上题,写出对应的广义表。 LS=(((a,b,()),()),(a,(b)),() 6.设二维数组a7*6的每个元素占6个字节,且LOC(a00)=100,问A共占多少个字节? A的终端结点a65的起始地址为何? 按行和按列优先存储时,a35的起始地址分别为何? (5分) 7.设有一个10阶的对称矩阵A,采用以行优先的方式压缩存储。 a11为第1个元素,其存储地址为1,每个元素占3个存储单元。 求总存储空间大小是多少? 元素a85和元素a58的地址是多少? (写出计算过程) 8.画出下面广义表的头尾链表存储结构,并写出该表的表头和表尾。 (5分) LS=(z,(x,y,(a,b))) head(LS)=z tail(LS)=((x,y,(a,b))) 画图(表头表尾法) 五、算法 1.Q是一个循环队列,请分别写出插入和删除一个元素的算法 #defineMAXSIZE100//最大队列长度 typedefstruct{ QElemType*base; intfront,rear; }SqQueue; (以下算法3分: ) intEnQueue(SqQueue&Q,QElemTypex) { //Q是一个循环队列,若队列不满,则将x插入并返回1;否则返回0 if((Q.rear+1)%MAXSIZE==Q.front) return0;//队列满 Q.base[Q.rear]=x; Q.rear=(Q.rear+1)%MAXSIZE; return1; } (以下算法3分: ) intDeQueue(SqQueue&Q,QElemType&x) { //Q是一个循环队列,若队列不空,则删除队头元素并由x带回, //且返回1;否则返回0 if(Q.front==Q.rear) return0; else {x=Q.base[Q.front]; Q.front=(Q.front+1)%MAXSIZE; return1;} ) 1.已知: Q是一个循环队列,并且已知下列定义: #defineMAXSIZE100 typedefstruct{ QElemTypebase[MAXSIZE]; intfront,rear; }SqQueue; 约定: 顺序队中,非空队中,头指针始终指向队列头元素的前一个元素,而尾指针始终指向队列尾元素。 请写出插入一个元素的算法(6分,每空2分) intEnQueue(SqQueue&Q,QElemTypex) { if( ) return0; Q.rear= ; Q.base[ ]=x; return1; } 四.算法分析 简述下列算法的功能(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复习