数据结构试题库及答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

数据结构试题库及答案

一、线性表

(一)选择题

线性表若采用链式存储结构时,要求内存中可用存储单元的地址()

A.必须是连续的

B.部分地址必须是连续的

C.一定是不连续的

D.可以是连续的,也可以是不连续的

答案:D。链式存储结构中,节点之间通过指针链接,每个节点的存储地址可以独立,无需连续,所以内存中可用存储单元地址可连续也可不连续。

在一个长度为n的顺序表中,在第i个元素(1≤i≤n)之前插入一个新元素时,需要向后移动()个元素

A.n-i

B.n-i+1

C.n-i-1

D.i

答案:B。顺序表插入元素时,从第i个元素开始,包括第i个元素,后面的所有元素都要向后移动一位,共n-i+1个元素。

(二)应用题

已知单链表的头指针为head,试编写算法删除单链表中所有值为x的节点。

答案:

算法思想:遍历单链表,遇到值为x的节点时,将其前驱节点的指针指向其后继节点,实现该节点的删除,同时释放被删除节点的内存空间。

typedefstructNode{

intdata;

structNode*next;

}Node,*LinkList;

voidDeleteX(LinkList*head,intx){

Node*p=*head,*q;

//处理头节点值为x的情况

while(p!=NULLp-data==x){

*head=p-next;

free(p);

p=*head;

}

//处理非头节点值为x的情况

if(p!=NULL){

while(p-next!=NULL){

if(p-next-data==x){

q=p-next;

p-next=q-next;

free(q);

}else{

p=p-next;

}

}

}

}

时间复杂度:O(n),需遍历整个单链表,n为单链表节点个数;空间复杂度:O(1),仅使用几个指针变量。

二、栈和队列

(一)选择题

栈的特点是()

A.先进先出

B.后进先出

C.随机存取

D.顺序存取

答案:B。栈是一种限定仅在表尾进行插入和删除操作的线性表,遵循后进先出的原则。

循环队列的队满条件是()

A.(rear+1)%maxsize==front

B.rear==front

C.rear+1==front

D.(front+1)%maxsize==rear

答案:A。为区分循环队列的队满和队空,通常采用牺牲一个存储单元的方法,当(rear+1)%maxsize==front时,表示队满。

(二)应用题

试编写算法,利用栈将一个带头节点的单链表逆序。

答案:

算法思想:先遍历单链表,将链表中的节点数据依次压入栈中,然后再次遍历单链表,将栈中数据依次弹出并赋值给链表节点,实现链表逆序。

#includestdio.h

#includestdlib.h

typedefstructNode{

intdata;

structNode*next;

}Node,*LinkList;

typedefstructStack{

intdata[100];

inttop;

}Stack;

//初始化栈

voidInitStack(Stack*s){

s-top=-1;

}

//入栈

voidPush(Stack*s,intx){

s-data[++s-top]=x;

}

//出栈

intPop(Stack*s){

returns-data[s-top--];

}

//链表逆序

voidReverseList(LinkListhead){

Stacks;

InitStack(s);

Node*p=head-next;

//节点数据入栈

while(p!=NULL){

Push(s,p-data);

p=p-next;

}

p=head-next;

//

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档