数据结构与软件方法习题答案.docx
《数据结构与软件方法习题答案.docx》由会员分享,可在线阅读,更多相关《数据结构与软件方法习题答案.docx(10页珍藏版)》请在冰豆网上搜索。
数据结构与软件方法习题答案
线性表部分
一选择题
1.下述哪一条是顺序存储结构的优点?
()
A.存储密度大
B.插入运算方便
C.删除运算方便
D.可方便地用于各种逻辑结构的存储表示
2.下面关于线性表的叙述中,错误的是哪一个?
()
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
3.线性表是具有n个()的有限序列(n>0)。
A.表元素
B.字符
C.数据元素
D.数据项
E.信息项
4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A.顺序表
B.双链表
C.带头结点的双循环链表
D.单循环链表
5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
A.单链表
B.仅有头指针的单循环链表
C.双链表
D.仅有尾指针的单循环链表
6.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为()(1<=i<=n+1)。
A.O(0)
B.O
(1)
C.O(n)
D.O(n2)
7.线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为()
A.O(i)
B.O
(1)
C.O(n)
D.O(i-1)
8.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:
()。
A.p->next=s;s->next=p->next;
B.s->next=p->next;p->next=s;
C.p->next=s;p->next=s->next;
D.p->next=s->next;p->next=s;
9.对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是()
A.head==NULL
B.head→next==NULL
C.head→next==head
D.head!
=NULL
二、判断
1.链表中的头结点仅起到标识的作用。
(×)
2.顺序存储结构的主要缺点是不利于插入或删除操作。
(√)
3.顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。
(×)
4.对任何数据结构链式存储结构一定优于顺序存储结构。
(×)
5.顺序存储方式只能用于存储线性结构。
(×)
6.线性表的特点是每个元素都有一个前驱和一个后继。
(×)
7.取线性表的第i个元素的时间同i的大小有关.(×)
8.顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
(×)
9.链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺
序存储结构中效率高。
(√)
三、填空
1.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快
的速度存取线性表中的元素时,应采用_顺序_存储结构。
2.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是_(n-1)/2_。
3.在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需
向后移动_n-i+1_个元素。
4.在单链表中设置头结点的作用是:
主要是使插入和删除等操作统一,在第一
个元素之前插入元素和删除第一个结点不必另作判断;另外,不论链表是否为空,链表指针不变。
5.根据线性表的链式存储结构中每一个结点包含的指针个数,将线性链表分成_
单链表_和多重链表;而又根据指针的连接方式,链表又可分成(动态)链表和静态链表。
6.链接存储的特点是利用_指针_来表示数据元素之间的逻辑关系。
7.顺序存储结构是通过_物理上相邻表示元素之间的关系的;链式存储结构是通过_指针_表示元素之间的关系的。
8.已知指针p指向单链表L中的某结点,则删除其后继结点的语句是:
u=p->next;p->next=u->next;free(u);
9.在单链表L中,指针p所指结点有后继结点的条件是:
p->next!
=null
10.以下程序的功能是实现带附加头结点的单链表数据结点逆序连接,
请填空完善之。
voidreverse(SqListh)
/*h为附加头结点指针;类型pointer*/
{SqListp,q;
p=h->next;
h->next=NULL;
while(
(1)_p!
=null_)
{q=p;
p=p->next;
q->next=h->next;
h->next=
(2)__q__;}
栈和队列部分
一选择题
1.对于栈操作数据的原则是()。
A.先进先出
B.后进先出
C.后进后出
D.不分顺序
2.在作进栈运算时,应先判别栈是否(①),在作退栈运算时应先判别栈是否(②)。
当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③)。
为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的(④)分别设在这片内存空间的两端,这样,当
(⑤)时,才产生上溢。
①,②:
A.空B.满C.上溢D.下溢
③:
A.n-1B.nC.n+1D.n/2
④:
A.长度B.深度C.栈顶D.栈底
⑤:
A.两个栈的栈顶同时到达栈空间的中心点.
B.其中一个栈的栈顶到达栈空间的中心点.
C.两个栈的栈顶在栈空间的某一位置相遇.
D.两个栈均不空,且一个栈的栈顶到达另一个栈的栈底.
3.一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是()。
A.不确定
B.n-i+1
C.i
D.n-i
4.某堆栈的输入序列为a,b,c,d,下面的四个序列中,不可能是它的输出序列的是()。
A.a,c,b,d
B.b,c,d,a
C.c,d,b,a
D.d,c,a,b
5.依次读入数据元素序列{a,b,c,d,e,f,g}进栈,每进一个元素,机器可要求下一个元素进栈或弹栈,如此进行,则栈空时弹出的元素构成的序列是以下哪些序列?
A.{d,e,c,f,b,g,a}
B.{f,e,g,d,a,c,b}
C.{e,f,d,g,b,c,a}
D.{c,d,b,e,f,a,g}
6.循环队列A[0..m-1]存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是()。
A.(rear-front+m)%m
B.rear-front+1
C.rear-front-1
D.rear-front
7.循环队列存储在数组A[0..m]中,则入队时的操作为()。
A.rear=rear+1
B.rear=(rear+1)mod(m-1)
C.rear=(rear+1)modm
D.rear=(rear+1)mod(m+1)
8.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别
为多少?
()
A.1和5
B.2和4
C.4和2
D.5和1
9.最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。
A.(rear+1)MODn=front
B.rear=front
C.rear+1=front
D.(rear-l)MODn=front
10.栈和队列的共同点是()。
A.都是先进先出
B.都是先进后出
C.只允许在端点处插入和删除元素
D.没有共同点
11.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是()。
A.6
B.4
C.3
D.2
二判断题
1.消除递归不一定需要使用栈,此说法(√)
2.栈是实现过程和函数等子程序所必需的结构。
(√)
3.两个栈共用静态存储空间,对头使用也存在空间溢出问题。
(√)
4.两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
(√)
5.即使对不含相同元素的同一输入序列进行两组不同的合法的入栈和出栈组合操作,所得的输出序列也一定相同。
(×)
6.栈与队列是一种特殊操作的线性表。
(√)
7.若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列3,2,5,6,4,1.(√)
8.栈和队列都是限制存取点的线性结构。
(√)
9.若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列1,5,4,6,2,3。
(×)
10.任何一个递归过程都可以转换成非递归过程。
(√)
填空题
15.队列的特点是_先进先出。
16.队列是限制插入只能在表的一端,而删除在表的另一端进行的线性表,其特点是_先进先出。
17.已知链队列的头尾指针分别是f和r,则将值x入队的操作序列是_s=(LinkedList)malloc(sizeof(LNode));s->data=x;s->next=r->next;r->next=s;r=s;。
18.区分循环队列的满与空,只有两种方法,它们是牺牲一个存储单元和设标记。
19.循环队列的引入,目的是为了克服_假溢出时大量移动数据元素。
数组部分
1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()。
A.13
B.33
C.18
D.40
2.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()。
A.BA+141
B.BA+180
C.BA+222
D.BA+225
3.对稀疏矩阵进行压缩存储目的是()。
A.便于进行矩阵运算
B.便于输入和输出
C.节省存储空间
D.降低运算的时间复杂度
4.判断:
数组可看成线性结构的一种推广,因此与线性表一样,可以对它进行插入,删除等操作。
(×)
5.设有二维数组A[0..9,0..19],其每个元素占两个字节,第一个元素的存储地址为100,若按列优先顺序存储,则元素A[6,6]存储地址为__232_。
6、二维数组A的每个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10。
若A按行先存储,元素A[8,5]的起始地址与当A按列先存储时的元素()的起始地址相同。
设每个字符占一个字节。
A.A[8,5]
B.A[3,10]
C.A[5,8]
D.A[0,9]