数据机构专业习题课及答案.docx
- 文档编号:8670410
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:11
- 大小:26.05KB
数据机构专业习题课及答案.docx
《数据机构专业习题课及答案.docx》由会员分享,可在线阅读,更多相关《数据机构专业习题课及答案.docx(11页珍藏版)》请在冰豆网上搜索。
数据机构专业习题课及答案
习题练习第一章绪论
1、voidmaxtrixmult(intn,inta[][100],intb[][100],intc[][100])
{
intj,k,r;
intx;
for(r=0;r<=n;r++)1)n+2
{
for(j=0;j<=n;j++)2)(n+1)*(n+2)
{
x=0;3)(n+1)2
for(k=1;k<=n;k++)4)(n+1)3
x+=a[r][k]*[k][j];5)n*(n+1)2
c[r][j]=x;6)(n+1)2
}
}
}
计算时间每条语句的频度和该算法的时间复杂度
2.一个算法应该是(B)。
【中山大学1998二、1(2分)】
A.程序B.问题求解步骤的描述C.要满足五个基本特性D.A和C.
3.下面说法错误的是(C)【南京理工大学2000一、2(1.5分)】
(1)算法原地工作的含义是指不需要任何额外的辅助空间
(2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法
(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界
(4)同一个算法,实现语言的级别越高,执行效率就越低
A.
(1)B.
(1),
(2)C.
(1),(4)D.(3)
4.从逻辑上可以把数据结构分为(C)两大类。
【武汉交通科技大学1996一、4(2分)】
A.动态结构、静态结构B.顺序结构、链式结构
C.线性结构、非线性结构D.初等结构、构造型结构
5.以下与数据的存储结构无关的术语是(D)。
【北方交通大学2000二、1(2分)】
A.循环队列B.链表C.哈希表D.栈
6.连续存储设计时,存储单元的地址(A)。
【中山大学1999一、1(1分)】
A.一定连续B.一定不连续C.不一定连续D.部分连续,部分不连续
7.数据元素是数据的最小单位。
(F)
【北京邮电大学1998一、1(2分)】【青岛大学2000一、1(1分)】
【上海交通大学1998一、1】【山东师范大学2001一、1(2分)】
8.记录是数据处理的最小单位。
(F)【上海海运学院1998一、5(1分)】
9.在顺序存储结构中,有时也存储数据结构中元素之间的关系。
(F)
【华南理工大学2002一、2(1分)】
10.顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
(F)
【上海海运学院1999一、1(1分)】
11.数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的储存结构.(F)
【上海海运学院1998一、1(1分)】
12.一个数据结构在计算机中映像称为存储结构。
【华中理工大学2000一、1(1分)】
13.下面程序段中带下划线的语句的执行次数的数量级是:
log2n【合肥工业大学1999三、1(2分)】
i:
=1;WHILEi =i*2; 14.下面程序段中带下划线的语句的执行次数的数量级是(.log2n)。 【合肥工业大学2000三、1(2分)】 i: =1; WHILEi =1TOnDOx: =x+1;i: =i*2END; 第二章线性表 1.线性表是具有n个(C)的有限序列(n>0)。 【清华大学1998一、4(2分)】 A.表元素B.字符C.数据元素D.数据项E.信息项 2.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(A)存储方式最节省时间。 【哈尔滨工业大学2001二、1(2分)】 A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表 3.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(D)存储方式最节省运算时间。 【南开大学2000一、3】 A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表 4.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用(D)最节省时间。 A.单链表B.单循环链表C.带尾指针的单循环链表D.带头结点的双循环链表 5.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为(C)(1<=i<=n+1)。 【北京航空航天大学1999一、1(2分)】 A.O(0)B.O (1)C.O(n)D.O(n2) 6.线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为(C) A.O(i)B.O (1)C.O(n)D.O(i-1)【中山大学1999一、2】 7.非空的循环单链表head的尾结点p↑满足(A)。 【武汉大学2000二、10】 A.p->next=headB.p->next=NILC.p=NILD.p=head 8.循环链表H的尾结点P的特点是(A)。 【中山大学1998二、2(2分)】 A.P->NEXT=HB.P->NEXT=H->NEXTC.P=HD.P=H->NEXT 9.在一个以h为头的单循环链中,p指针指向链尾的条件是(A)【南京理工大学1998一、15(2分)】 A.p->next=hB.p->next=NILC.p->next->next=hD.p->data=-1 10.完成在双循环链表结点p之后插入s的操作是(D);【北方交通大学1999一、4(3分)】 A.p->next=s;s->priou=p;p->next->priou=s;s->next=p->next; B.p->next->priou=s;p->next=s;s->priou=p;s->next=p->next; C.s->priou=p;s->next=p->next;p->next=s;p->next->priou=s; D.s->priou=p;s->next=p->next;p->next->priou=s;p->next=s; 11.在双向循环链表中,在p指针所指向的结点前插入一个指针q所指向的新结点,其修改指针的操作是(C)。 【北京邮电大学1998二、2(2分)】 注: 双向链表的结点结构为(llink,data,rlink)。 供选择的答案: A.p->llink=q;q->rlink=p; p->llink->rlink=q;q->llink=q; B.p->llink=q;p->llink->rlink=q q->rlink=pq->llink=p->llink; C.q->rlink=p;q->llink=p->llink p->llink->rlink=q;p->llink=q; D.q->llink=p->llink;q->rlink=p; p->llink=q;p->llink=q; 12.线性表的特点是每个元素都有一个前驱和一个后继。 (F)【合肥工业大学2001二、1(1分)】 13.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是__(n-1)/2____。 插入是n/2【北方交通大学2001二、9】 14.在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需向后移动______N-I+1__个元素。 15、从一个具有n个节点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较(N+1)/2个结点【北京工商大学2001二、4(4分)】 16.带头结点的双循环链表L中只有一个元素结点的条件是: _L->next->next==L___ 【合肥工业大学1999三、32000三、2(2分)】 17.在单链表L中,指针p所指结点有后继结点的条件是: .p->next! =null__【合肥工业大学2001三、3(2分)】 18设有一带头结点的单链表,编程将链表颠倒过来.要求不用另外的数组或结点完成.【南京航空航天大学1999八(10分)】 (1)要求编程实现带头结点的单链表的逆置。 首先建立一单链表,然后逆置。 typedefstructnode {intdata;∥假定结点数据域为整型。 structnode*next; }node,*LinkedList; LinkedListcreat() {LinkedListhead,p intx; head=(LinkedList)malloc(sizeof(node)); head->next=null;/*设置头结点*/ scanf(“%d”,&x); while(x! =9999)/*约定输入9999时退出本函数*/ {p=(LinkedList)malloc(sizeof(node)); p->data=x; p->next=head->next;/*将新结点链入链表*/ head->next=p; scanf(“%d”,&x); } return(head); }∥结束creat函数。 LinkedListinvert1(LinkedListhead) /*逆置单链表*/ {LinkedListp=head->next;/*p为工作指针*/ head->next=null; while(p! =null) {r=p->next;/*暂存p的后继*/ p->next=head->next; head->next=p; p=r; } return(head); }/*结束invert1函数*/ main() {LinkedListla; la=creat();/*生成单链表*/ la=invert1(la);/*逆置单链表*/ } 19、设有一头指针为L的带有表头结点的非循环双向链表,其每个结点中除有pred(前驱指针),data(数据)和next(后继指针)域外,还有一个访问频度域freq。 在链表被起用前,其值均初始化为零。 每当在链表中进行一次Locate(L,x)运算时,令元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度非增(递减)的顺序排列,同时最近访问的结点排在频度相同的结点的最后,以便使频繁访问的结点总是靠近表头。 试编写符合上述要求的Locate(L,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。 【清华大学1997二(10分)】 [题目分析]首先在双向链表中查找数据值为x的结点,查到后,将结点从链表上摘下,然后再顺结点的前驱链查找该结点的位置。 DLinkListlocate(DLinkListL,ElemTypex) ∥L是带头结点的按访问频度递减的双向链表,本算法先查找数据x,查找成功时结点的访问频度域增1,最后将该结点按频度递减插入链表中适当位置。 {DLinkListp=L->next,q;∥p为L表的工作指针,q为p的前驱,用于查找插入位置。 while(p&&p->data! =x)p=p->next;∥查找值为x的结点。 if(! p){printf(“不存在值为x的结点\n”);exit(0);} else{p->freq++;∥令元素值为x的结点的freq域加1。 p->next->pred=p->pred;∥将p结点从链表上摘下。 p->pred->next=p->next; q=p->pred;∥以下查找p结点的插入位置 while(q! =L&&q->freq p->next=q->next;q->next->pred=p;∥将p结点插入 p->pred=q;q->next=p; } return(p);∥返回值为x的结点的指针 }∥算法结束 第三章栈和队列 1、判定一个循环队列QU(最多元素为m0)为空的条件QU.rear==QU.front 2、判定一个循环队列QU(最多元素为m0)为满的条件QU.front==(QU.rear+1)%m0 3、一个循环队列QU(最多元素为m0)队列满时,队列中有m0-1个元素 4.一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是(B)。 A.不确定B.n-i+1C.iD.n-i 【中山大学1999一、9(1分)】 5.若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是(D)。 A.i-j-1B.i-jC.j-i+1D.不确定的 【武汉大学2000二、3】 6.一个栈的输入序列为12345,则下列序列中不可能是栈的输出序列的是(B)。 A.23415B.54132C.23145D.15432 【南开大学2000一、1】【山东大学2001二、4(1分)】【北京理工大学2000一、2(2分)】 7.某堆栈的输入序列为a,b,c,d,下面的四个序列中,不可能是它的输出序列的是(D)。 A.a,c,b,dB.b,c,d,aC.c,d,b,aD.d,c,a,b 8.执行完下列语句段后,i值为: (B)【浙江大学2000一、6(3分)】 intf(intx) {return((x>0)? x*f(x-1): 2);} inti; i=f(f (1)); A.2B.4C.8D.无限递归 9.表达式a*(b+c)-d的后缀表达式是(B)。 【南京理工大学2001一、2(1.5分)】 A.abcd*+-B.abc+*d-C.abc*+d-D.-+*abcd 10.表达式3*2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(D),其中^为乘幂。 A.3,2,4,1,1;(*^(+*-B.3,2,8;(*^-C.3,2,4,2,2;(*^(-D.3,2,8;(*^(- 11.循环队列存储在数组A[0..m]中,则入队时的操作为(D)。 【中山大学1999一、6(1分)】 A.rear=rear+1B.rear=(rear+1)mod(m-1) C.rear=(rear+1)modmD.rear=(rear+1)mod(m+1) 12.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少? (B)【浙江大学1999四、1(4分)】 A.1和5B.2和4C.4和2D.5和1 13、从一个带头结点的栈顶指针为HS的链式栈中插入一个S所指的结点时,执行S->next=HS->next;HS->next=S。 14、从一个带头结点的栈顶指针为HS的链式栈中删除一个结点时,并用x保存被删除结点的值,则执行x=HS->next->data;HS->next=HS->next->next。 15.完善下面算法。 【中山大学1998四、2(6分)】 后缀表达式求值,表达式13/25+61的后缀表达式格式为: 13,25/61,+ FUNCcompute(a): real;后缀表达式存储在数组a[1..m]中。 BEGIN setnull(s);i: =1;ch: = (1)__a[i]或a[1]___; WHILEch<>’@’DO BEGIN CASEchOF ‘0’..‘9’: x: =0; WHILEch<>’,’DO BEGIN x: =x*10+ord(ch)-ord(‘0’); i: =i+1;ch: = (2)___a[i]__; END ‘+’: x: =pop(s)+pop(s); ‘-‘: x: =pop(s);x: =pop(s)-x; ‘*’: x: =pop(s)*pop(s); ‘/’: x: =pop(s);x: =pop(s)/x; ENDCASE push(s,x);i: =i+1;ch: =a[i]; END; comput: =(3)_pop(s)或s[1]___; END; 16.有字符串次序为3*-y-a/y^2,利用栈,给出将次序改为3y-*ay2^/-的操作步骤。 (可用X代表扫描该字符串过程中顺序取一个字符进栈的操作,用S代表从栈中取出一个字符加入到新字符串尾的出栈操作。 例如,ABC变为BCA的操作步骤为XXSXSS)【东北大学2001一、4(4分)】 答案: XSXXXSSSXXSXXSXXSSSS 第五章数组 1、在一个长度为n的向量中的第I个元素(1<=I<=n)之前插入一个元素时,须向后移动N-I+1个元素 2、在一个长度为n的向量中删除第I个元素(1<=I<=n)时,须向前移动N-I个元素 3.数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是(A)。 【南京理工大学2001一、13(1.5分)】 A.1175B.1180C.1205D.1210 4、二维数组M的元素是4个字符(每个字符占一个存储单元)组成的串,行下标k的范围从0到4,列下标j的范围从0到5,M按行存储时元素M[3][5]的起始地址与M按列存储时元素M[3][4]的起始地址相同。 5、数组A中,每个元素的长度是3个字节,行下标k的范围从1到8,列下标j的范围从1到10,从首地址SA开始连续存放在存储器中,该数组按行存放时,元素A[8][5]的起始地址为SA+222。 6.设数组a[1..50,1..80]的基地址为2000,每个元素占2个存储单元,若以行序为主序顺序存储,则元素a[45,68]的存储地址为_9174_;若以列序为主序顺序存储,则元素a[45,68]的存储地址为_8788_。 7、数组A中,每个元素的长度是3个字节,行下标k的范围从1到8,列下标j的范围从1到10,从首地址SA开始连续存放在存储器中,该数组按列存放时,元素A[5][8]的起始地址为SA+180。 8、二维数组A[10…20][5…10]采用行序为主方式存储,每个元素占4个存储单元,并且A[10][5]的存储地址是1000,则A[18][9]的地址是1208。 9、有一个10阶对称矩阵A,采用压缩存储方式存储,(按行为主序,并且A[0][0]=1),则A[8][5]的地址为42。 10、一个稀疏矩阵如图,则对应的三元组为: 0020 3000 00-15 0000 11、按行优先和按列优先分别列出四维数组intA[2][2][2][2]所有元素在内存中存储的先后顺序。 按行优先: A[0][0][0][0],A[0][0][0][1],A[0][0][1][0],A[0][0][1][1], A[0]1][0][0],A[0][1][0][1],A[0][1][1][0],A[0][1][1][1], A[1][0][0][0],A[1][0][0][1],A[1][0][1][0],A[1][0][1][1], A[1][1][0][0],A[1][1][0][1],A[1][1][1][0],A[1][1][1][1], 按列优先: A[0][0][0][0],A[1][0][0][0],A[0][1][0][0],A[1][1][0][0], A[0][0][1][0],A[1][0][1][0],A[0][1][1][0],A[1][1][1][0], A[0][0][0][1],A[1][0][0][1],A[0][1][0][1],A[1][1][0][1], A[0][0][1][1],A[1][0][1][1],A[0][1][1][1],A[1][1][1][1], 12.一个稀疏矩阵Am*n采用三元组形式表示,若把三元组中有关行下标与列下标的值互换,并把m和n的值互换,则就完成了Am*n的转置运算。 (F)【西安交通大学1996二、8(3分)】 13.二维以上的数组其实是一种特殊的广义表。 (T)【北京邮电大学2002一、5(1分)】 14.广义表的取表尾运算,其结果通常是个表,但有时也可是个单元素值。 (F) 【南京航空航天大学1996六、2(1分)】 15、广义表(a,b,c,d)的表头是a,表尾是(b,c,d)。 16、广义表((a,b,c,d))的表头是(a,b,c,d),表尾是()。 17、广义表(a,(b,c,d))的表头是a,表尾是((b,c,d))。 18、广义表(a,(b,(c,(d))))的表头是a,表尾是((b,(c,(d))),长度是2,深度是4。 19、广义表(a,((b,(c),f),e),d)的表头是a,表尾是(((b,(c),f),e),d),长度是3,深度是4。 20、HEAD[TAIL[(a,b,c)]]的结果是b; TAIL[HEAD[((a,b),(c,d))]]的结果是(b); HEAD[HEAD[((a,b),(c,d))]]的结果是a; 21.已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是(C)。 A.head(tail(LS))B.tail(head(LS)) C.head(tail(head(tail(LS)))D.head(tail(tail(head(LS)))) 【西安电子科技大学2001应用一、3(2分)】 22.广义表A=(a,b,(c,d),(e,(f,g))),则下面式子的值为(D)。 【北京邮电大学1999一、2(2分)】 Head(Tail(Head(Tail(Tail(A))))) A.(g)B.(d)C.cD.d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 机构 专业 习题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)