数据结构练习4Word文档下载推荐.docx

上传人:b****5 文档编号:18134094 上传时间:2022-12-13 格式:DOCX 页数:17 大小:61.95KB
下载 相关 举报
数据结构练习4Word文档下载推荐.docx_第1页
第1页 / 共17页
数据结构练习4Word文档下载推荐.docx_第2页
第2页 / 共17页
数据结构练习4Word文档下载推荐.docx_第3页
第3页 / 共17页
数据结构练习4Word文档下载推荐.docx_第4页
第4页 / 共17页
数据结构练习4Word文档下载推荐.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数据结构练习4Word文档下载推荐.docx

《数据结构练习4Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构练习4Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。

数据结构练习4Word文档下载推荐.docx

D(3)若5个元素的出栈序列为1,2,3,4,5,则进栈序列可能是——。

A.2,4,3,1,5B.2,3,1,5,4C.3,1,4,2,5D.3,1,2,5,4

A(4)某队列初始为空,若它的输入序列为a,b,c,d,它的输出序列应为——。

A.a,b,c,dB.d,c,b,aC.a,c,b,dD.d,a,c,b

找公式(5)当4个元素的进栈序列给定以后,由这4个元素组成的可能的出栈序列应该有——。

A.24种B.17种C.16种D.14种

*(6)设n个元素的进栈序列为1,2,3,…,n,出栈序列为p1,p2,p3,…,pn,若Pi=n,则B(1≤i<

n)的值——。

A.为iB.为n-iC.为n-i+lD.有多种可能

A(7)设n个元素的进栈序列为p1,p2,p3,…,pn,出栈序列为1,2,3,…,n,若Pn=l,则n(1≤i<

n)的值——。

D(8)若堆栈采用顺序存储结构,正常情况下,往堆栈中插入一个元素,栈顶指针top的变化是______.

A.不变B.top=0C.top--D.top++

C(9)若堆栈采用顺序存储结构,正常情况下,删除堆栈中一个元素,栈顶指针top的变化是______.

B(10)若队列采用顺序存储结构,元素的排列顺序——。

A.与元素的值的大小有关

B.由元素进入队列的先后顺序决定

C.与队头指针和队尾指针的取值有关

D.与作为顺序存储结构的数组的大小有关

C(11)“链接队列”这一概念不涉及——。

A.数据的存储结构B.数据的逻辑结构

C.对数据进行的操作D.链表的种类

C(12)若堆栈采用链式存储结构,栈顶指针为top,向堆栈插入一个由p所指的新结点的过程是依次执行:

——,top=p。

A.p=topB.top=pC.p->

link=topD.top->

link=p

B(13)若非空堆栈采用链式存储结构,栈顶指针为top,删除堆栈的一个元素的过程是依次执行:

p=top,——,free(p)。

A.top=pB.top=p->

linkC.p=top->

linkD.p=p->

link

C(14)若队列采用链式存储结构,队头元素指针与队尾元素指针分别为front和rear,向队列中插入一个由p所指的新结点的过程是依次执行:

——,rear=p。

A.rear=pB.front=pC.rear->

link=pD.front->

D(15)若非空队列采用链式存储结构,队头元素指针与队尾元素指针分别为front和rear,删除队列的一个元素的过程是依次执行:

p=front,——,free(p)。

A.rear=pB.rear=p->

linkC.rear=p->

linkD.front=p->

C(16)在循环队列中,若front与rear分别表示队头元素和队尾元素的位置,则判断循环队列队空的条件是——。

A.front=rear+1B。

rear=front+1C.front--rearD.b叭t:

A(17)若描述某循环队列的数组为ClUELIE[M],当循环队列满时,队列中有——个元素。

A.MB.M-1C.M十1D.M+2

D(18)在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据打印,该缓冲区应该是一个——结构。

A.线性表B.数组C.堆栈D.队列

C(19)设计一个递归问题的非递归算法通常需要设置——结构。

*(20)中缀表达式A-(B+C/D)*E的后缀形式是——。

A.ABC+D/*E—B.ABCD/+E*—C.AB-C十D/E*D.ABC-+D/E*

4.3填空题。

(1)堆栈和队列的逻辑结构都是线性结构。

(2)堆栈的插入和删除操作都是在栈顶位置进行,而队列的插入操作在队尾进行,删除操作在队头进行。

(3)对某堆栈执行删除操作时,只有在栈顶情况下,才会将栈底元素删除。

(4)在具体的程序设计过程中,堆栈的顺序存储结构一般是利用一个数组描述的,同时还要定义一个整型变量来栈顶。

(5)若堆栈采用顺序存储结构,在不产生溢出的情况下往堆栈中插人一个新元素,首先移动,然后写入。

(6)若队列采用顺序存储结构,未溢出时插入一个元素首先插入一个元素,然后再写入。

(7)当堆栈的最大长度难以估计时,堆栈最好采用链式存储结构。

(8)递归算法都可以通过设置堆栈机制改写成等价的非递归算法。

*(9)中缀形式的算术表达式A+(B-C)/D*E的后缀形式为——。

*(10)后缀形式的算术表达式ABCD/-E*+的中缀形式为——。

4.4已知堆栈采用链式存储结构,初始时为空,请画出a,b,c,d四个元素依次进栈以后该堆栈的状态,然后再画出此时的那个栈顶元素出栈后堆栈的状态。

4.5若按从左到右的顺序依次读人已知序列{a,b,c,d,e,f,g1中的元素,然后结合堆栈操作,能得到下列序列中的哪些序列(每个元素进栈一次,下列序列表示出栈的次序)?

{d,e,c,f,b,g,a}{f,e,g,d,a,c,b}

{e,f,d,g,b,c,a}{c,d,b,e,f,a,g}

4.6设有编号1,2,3,4的四辆列车,顺序进入一个栈式结构的站台,请写出这四辆列车开出车站的所有可能的顺序。

4.7设STACK[M]为n(n>

2)个堆栈共享。

各栈栈顶指针为top[n],分别指出各栈栈顶元素的位置;

栈底指针为bot[n+1],分别指出各栈栈底元素的位置。

初始时,

bop[i]=bot[i]=i*ROUND(M/n—0.5)(i=1,2,....,n)

其中,ROUND()为四舍五人取整函数。

请写一算法,该算法向任意指定的第i个堆栈插入一个新的元素x。

仅当M个空间全部占用时才产生溢出,并报告相应信息(1≤i≤n)。

4.8设中缀表达式E存放于字符数组中,并以@作为结束标志。

请写出判断一个中缀表达式E中左、右圆括号是否配对的算法。

4.9写出将中缀表达#(a+b)/c-d#变换为后缀表达式的过程中,每读到一个单词时堆栈的状态(#为中缀表达式的左、右分界符)。

4.10已知n为大于等于零的整数,请写出利用堆栈计算下列递归函数f(n)的非递归算法。

4.11已知Ackerman函数定义如下:

(1)写出递归算法;

(2)利用堆栈写出非递归算法;

(3)根据非递归算法,求出A(:

K(2,1)的值。

4.12已知求两个正整数m和n的最大公约数的过程可以表达为如下递归函数:

请写出求解该递归函数的非递归算法。

mMODn表示m对n取模。

4.13假设以数组Q[M]存放循环队列的元素,同时设置变量rear与qlen分别指示循环队列中队尾元素的位置和队列中元素的个数。

请给出此循环队列的队满条件,并写出相应的进队与出队算法(在出队算法中要求返回队头元素)。

4.14编写一非递归算法,对于给定的十进制整数n,打印出对应的r进制整数(2≤r≤16,r<

>

10)。

4.15梵塔问题是这样的:

一个底盘上有三根竖着的针,初始时A针穿着一叠盘片(如图4,20所示),现要求将这一叠盘片移到C针上,并且任何时刻不得将大盘放在小盘之上,而且每一次只允许移动一张盘片。

写一算法,打印出正确的操作步骤。

提示:

将n张盘片由A依次移到C,B作为辅助针。

当n=1时,可以直接完成。

否则,将顶上的n—1张盘片移到B针上,用C针作为辅助针;

然后移第n张盘片,最后将B上的n—1张盘片移到C针上,并用A针作为辅助针。

栈和队列历年试题

1.栈和队列都是(   )

A.限制存取位置的线性结构B.顺序存储的线性结构

C.链式存储的线性结构D.限制存取位置的非线性结构

2.若数组s[0..n-1]为两个栈s1和s2的共用存储空间,且仅当s[0..n-1]全满时,各栈才不能进行进栈操作,则为这两个栈分配空间的最佳方案是:

s1和s2的栈顶指针的初值分别为(   )

A.1和n+1B.1和n/2C.-1和nD.-1和n+1

3.若进栈序列为a,b,c,则通过入出栈操作可能得到的a,b,c的不同排列个数为()

A.4B.5C.6D.7

4.假设元素只能按a,b,c,d的顺序依次进栈,且得到的出栈序列中的第一个元素为c,则可能得到的出栈序列为________________,不可能得到的出栈序列为________________。

5.在栈的顺序实现中,若栈不满,则进栈操作可以用下列算法片断实现:

_____________;

sq->

data[sq->

top]=x;

6.链队列实际上是一个同时带有头指针和尾指针的单链表,尾指针指向该单链表的_____________。

7.如图所示,设输入元素的顺序是A,B,C,D,通过栈的变换,在输出端可得到各种排列。

若输出序列的第一个元素为D,则输出序列为_______________。

8.队列中允许进行删除的一端为________________。

9.假设以S和X分别表示进栈和退栈操作,则对输入序列a,b,c,d,e进行一系列栈操作SSXSXSSXXX之后,得到的输出序列为________。

10、设有一个顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素的出栈顺序为s2,s3,s4,s6,s5,s1,则顺序栈的容量至少应为多少?

11.如图所示,输入元素为A,B,C,在栈的输出端得到一个输出序列ABC,求出在栈的输入端所有可能的输入序列。

(5分)

 

第五章广义表字符串数组

习题

5.1单项选择题。

(1)空的广义表是指广义表——。

A.深度为0B。

尚未赋值

C.不含任何原子元素D.不含任何元素

(2)广义表中元素分为——。

A.原子元素B.表元素

C.原子元素和表元素D.任意元素

(3)广义表的长度是指——。

A.广义表中元素的个数B.广义表中原子元素的个数

C.广义表中表元素的个数Di广义表中括号嵌套的层数

(4)广义表的深度是指——。

久广义表中元素的个数B.广义表中原子元素的个数

C.广义表中表元素的个数D.广义表中括号嵌套的层数

(5)在一个长度为n,包含m个原子元素的广义表中,——。

A.m和n相等B.m不大于nC.m不小于nD.m与n无关

(6)广义表A=((),(a),(b,(c,d)))的长度为——。

A.2B.3C.4D.5

(7)广义表A:

((),(a),(b,(c,d)))的深度为——。

5.2有人说,m*n阶矩阵是一种广义表结构,你认为如何?

请说明你的理由。

5.3请分别写出下列各广义表的长度与深度:

(1)A=((a))

(2)B=(a,(b,c,d),e,())

(3)C=(x,((y),B,A))

(4)D=(A,D)

5.6试写出判断两个广义表是否相等的递归算法。

5.7根据本章介绍的m元多项式的表示方法,试写出一个m元多项式相加的算法。

6.1请回答空串与空格串有何区别。

6.2两个字符串相等的充分必要条件是什么?

6.3已知字符串S采用链式存储结构,链结点大小为1。

试写出求该串长度的算法。

6.4已知字符串S1与S2都采用链式存储结构,链结点大小为1。

试写出判断S1与S2是否相等的算法。

若S1与S2相等,算法返回1否则返回0。

6.5设串S,S1,S2分别采用顺序存储结构,长度分别为len,lenl,len2。

试写一算法,用串S2替换串S中的子串S1。

6.6设串采用链式存储结构,链结点大小为1。

试写出删除S中从第i个字符开始连续k个字符的算法。

6.7在字节编址的机器中,字符串S1与S2分别存放在字符数组S饥M1]与S2[M2]中(LEN(S1)≤M1,LEN(S2)≤M2),并以,@,为串的结束标志。

试写一算法,求在S1中第一次出现而在S2中不出现的字符的位置。

6.8已知字符串的存储结构同

6.7题,并且有LEN(S1)=m,LEN(S2)=N0试写一算法,从S1中位置k开始插入字符串S2,并且取代S1中从第k个字符开始的连续t个字符。

设k+1<

mo

6.9已知字符串存放于字符数组S[M]中,并以’@’为串的结束标志。

试写一算法,判断该字符串是否是回文(即正读与反读相同)。

若字符串是回文,算法返回1,否则返回0。

6.10根据你所确定的一种存储结构设计一个算法,该算法的功能是求串S中出现的第一个最长重复子串的位置与长度。

6.11已知字符串采用链式存储结构,链结点大小为1。

对于给定的字符串S1与S2,请写一算法,求在S1中第一次出现,而在S2中不出现的所有字符。

各种考试试题

1.执行下列程序段后,串X的值为(   )

S=〞abcdefgh〞;

T=〞xyzw〞;

substr(X,S,2,strlen(T));

substr(Y,S,stelen(T),2);

strcat(X,Y);

A.〞cdefgh〞B.〞cdxyzw〞

C.〞cdefxy〞D.〞cdefef〞

2.多维数组之所以有行优先顺序和列优先顺序两种存储方式是因为(   )

A.数组的元素处在行和列两个关系中B.数组的元素必须从左到右顺序排列

C.数组的元素之间存在次序关系D.数组是多维结构,内存是一维结构

3.从广义表LS=((p,q),r,s)中分解出原子q的运算是(   )

A.tail(head(LS))B.head(tail(head(LS)))

C.head(tail(LS))D.tail(tail(head(LS)))

4.数组通常具有两种基本运算,即(   )

A.创建和删除B.索引和修改

C.读和写D.排序和查找

5.设有一5阶上三角矩阵A[1..5,1..5],现将其上三角中的元素按列优先顺序存放在一堆数组B[1..15]中。

已知B[1]的地址为100,每个元素占用2个存储单元,则A[3,4]的地址为(   )

A.116B.118C.120D.122

6.为查找某一特定单词在文本中出现的位置,可应用的串运算是()

A.插入B.删除C.串联接D.子串定位

7.已知函数Sub(s,i,j)的功能是返回串s中从第i个字符起长度为j的子串,函数Scopy(s,t)的功能为复制串t到s。

若字符串S=″SCIENCESTUDY″,则调用函数Scopy(P,Sub(S,1,7))后得到()

A.P=″SCIENCE″B.P=″STUDY″

C.S=″SCIENCE″D.S=″STUDY″

8.三维数组A[4][5][6]按行优先存储方法存储在内存中,若每个元素占2个存储单元,且数组中第一个元素的存储地址为120,则元素A[3][4][5]的存储地址为()

A.356B.358C.360D.362

9.串S=″Iamaworker″的长度是________。

10.假设一个10阶的下三角矩阵A按列优顺序压缩存储在一维数组C中,则C数组的大小应为________。

11、二维数组X的行下标范围是0~5,列下标范围是1~8,每个数组元素占六个字节,则该数组的体积为__A__个字节,若已知X的最后一个元素的起始字节地址为382,则X的首地址(即第一个元素的起始字节地址)为__B__,记为Xd。

若按行存储,则X[1,5]的起始地址是__C__,结束字节地址是___D__。

若按列存储,则X[4,8]的起始字节地址为__E__。

供选择的答案:

A:

①210②240③288④294

B:

①0②6③94④100

C:

①Xd+24②Xd+72③Xd+78④Xd+144

D:

①Xd+29②Xd+77③Xd+83④Xd+147

E:

①Xd+186②Xd+234③Xd+270④Xd+276

12、有一个二维数组A,行下标的范围是1~6,列下标的范围是0~7,每个数组元素用相邻的6个字节存储,存储器按字节编址。

那么,这个数组的体积是_A_个字节。

假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是_B_。

若按行存储,则A[2,4]的第一个字节的地址是_C_。

若按列存储,则A[5,7]的第一个字节的地址是_D_。

就一般情况而言,当_E_时,按行存储的A[5,7]的第一个字节的地址是_D_。

就一般情况而言,当_E_时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。

A~D:

①12    ②66③72④96

⑤114⑥120⑦156   ⑧234

   ⑨276    ⑩282⑾283⑿288

E:

  ①行与列的上界相同         ②行与列的下界相同

③行与列的上界相同且行与列的下界相同

   ④行的元素个数与列的元素的个数相同

13、设W为一个二维数组,其每个数据元素Wij占用6个字节,行下标i从0到8,列下标j从2到5,则二维数组W的数据元素共占用_A_个字节。

W中第6行的元素和第4列的元素共占用_B_个字节。

若按行顺序存放二维数组W,其起始地址的字节号为100,则二维数组W的最后一个数据元素的起始地址的字节号为_C_,数据元素W34的起始地址号为_D_,而数据元素W22的起始地址与当W按列顺序存放时数据元素_E_的起始地址相同。

供选择的答案

A:

①480②192③216④144

B:

①78②72③66④84

C:

①310②311③315④314

D:

①179②178③184④185

①W05②W28③W52④W82

阅读下列函数说明和C代码,将应填入__(n)__处的字句写在答卷的对应栏内。

【函数2.1说明】

  设长正整数用数组存储,如有k位的长整数m用数组a[]存储:

m=a[k]*10k-1+a[k-1]*10K-2+……+a[2]*101+a[1]*100

并用a[0]存储长整数m的位数,即a[0]=k。

  通常,存储长整数数组的每个元素只存储长整数的一位数字。

长整数运算时,为了运算方便,产生的中间结果的某位数字可能会大于9。

这时,就应调用本函数将它规整,使数组的每个元素只存储长整数的一位数字。

规整运算函数formal(int*a)就实现这个特殊要求。

【函数2.1】

voidformal(int*a)

{intp;

for(p=1;

p<

a[0]||a[p]>

10;

p++)

{if(p>

=a[0]__

(1)__;

a[p+1]+=a[p]/10;

a[p]=__

(2)__;

}

if(p>

a[0])__(3)__;

【函数2.2说明】

  函数combine(a,b,c)是计算两个整数的组合数。

由于计算结果超出longint的表示范围,故用本题【函数2.1说明】的方法存储计算结果。

设整数a和b(a>

=b),它们的组合c(a,b)=a!

/((a-b)!

*b!

)。

计算a和b的组合可采用以下方法:

a!

/(a-b)!

/b!

=a*(a-1)*(a-2)*…*(a-b+1)/b!

=u1*u2*…*ub/(d1*d2*…*db)

其中u1=a,u2=a-1,…,ub=a-b+1;

d1=1,d2=2,…,db=b。

  从而计算a和b的组合c(a,b),可变成计算上述分式。

  为计算上述分式,先从u1,u2,…,ub中去掉所有d1*d2*…*db的因子,得到新的u1,u2,…,ub。

然后再将它们相乘。

以下函数中调用的外部函数gcd(a,b)是求两整数a和b最大公因子的函数;

函数formal()就是本题中的函数2.1。

【函数2.2】

voidcombine(inta,intb,int*c)

{inti,j,x,k;

intd[MAXN],u[MAXN];

for(k=0,i=a;

i>

=a-b+1;

i--)u[++k]=i;

__(4)__;

for(i=1;

i<

=b;

i++)d[i]=i;

;

/*将整数1至b顺序存于数组d*/

=u[0];

i++)/*从u的各元素中,去掉d中整数的所有因子*/

if(u[i]!

=1)

for(j=1;

j<

j++)

if(__(5)__)

{x=gcd(u[i],d[j]);

u[i]/=x;

d[j]/=x;

c[0]=c[

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1