栈队列和数组自测试题.docx
- 文档编号:7945586
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:20
- 大小:42.62KB
栈队列和数组自测试题.docx
《栈队列和数组自测试题.docx》由会员分享,可在线阅读,更多相关《栈队列和数组自测试题.docx(20页珍藏版)》请在冰豆网上搜索。
栈队列和数组自测试题
第三章栈、队列和数组
一、名词解释:
1.栈、栈顶、栈底、栈顶元素、空栈2.顺序栈3.链栈
4.递归5.队列、队尾、队头6.顺序队7.循环队8.队满9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵
二、填空题:
1.栈修改的原则是或称,因此,栈
又称为线性表。
在栈顶进行插入运算,被
称为或,在栈顶进行删除运算,
被称为或。
2.栈的基本运算至少应包括、、
、、五种。
3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“”。
4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“”。
5.一般地,栈和线性表类似有两种实现方法,即实现和实现。
6.top=0表示,此时作退栈运算,则产生
“”;top=sqstack_maxsize表示,
此时作进栈运算,则产生“
7.以下运算实现在顺序栈上的初始化,请在
处用适当的句子予以填充。
intInitStack(SqStackTp*sq)
{___sq->top=0;
return
(1);}
8.以下运算实现在顺序栈上的进栈,请在处
用适当的语句予以填充。
IntPush(SqStackTp*sq,DataTypex)
{if(sp->top==sqstack_maxsize-1}{error(“栈
满”;return(O);}
else{sp->top++;:
*(sp->top)=x;
return
(1);}
}
9.以下运算实现在顺序栈上的退栈,请在用适当句子予以填充。
IntPop(SqStackTp*sq,DataType*x)
{if(sp->top==0){error(下溢”);return(O);}
else{*x=_*sp->top;
sp->top--;
return
(1);}
}
10.以下运算实现在顺序栈上判栈空,请在处用适当句子予以填充。
IntEmptyStack(SqStackTp*sq)
{if()return
(1);
elsereturn(0);
}
11.以下运算实现在顺序栈上取栈顶元素,请在处用适当句子予以填充。
IntGetTop(SqStackTp*sq,DataType*x)
{if(__sq->top==0)
return(0);
else{*x=__*sq->top;
return
(1);}
}
12.以下运算实现在链栈上的初始化,请在处用请适当句子予以填充。
VoidInitStacl(LstackTp*ls){
ls=()malloc();_is->next=NULL;}
13.'以下运算实现在链栈上的进栈,请在处用请适
当句子予以填充。
VoidPush(LStackTp*ls,DataTypex){LstackTp*p;p=malloc(sizeof(LstackTp));
__p->data=x;;
p->next=ls;
ls=p;;
}14.以下运算实现在链栈上的退栈,请在处用请适当句子予以填充。
//tou
IntPop(LstackTp*ls,DataType*x){LstackTp*p;if(ls!
=NULL)
{p=ls;
*x=__p->data;;
ls=ls->next;
free(p);return
(1);
}elsereturn(0);
}
15.以下运算实现在链栈上读栈顶元素,请在
处用请适当句子予以填充
IntGetTop(LstackTp*ls,DataType*x)
{if(ls!
=NULL){*x=_ls->data;re
turn
(1);}
elsereturn(0);
}
16.必须注意,递归定义不能是“循环定义”。
为此要求任何递归定义必须同时满足如下条件:
1被定义项在定义中的应用(即作为定义项的出现)具有;
2被定义项在最小“尺度”上的定义不是的。
17.队列简称。
在队列中,新插
入的结点只能添加到,被删除的只
能是排在的结点。
18.队列以线性表为逻辑结构,至少包括
、五种基本运算。
19.顺序队的出、入队操作会产生
20.以下运算实现在循环队上的初始化,请在
处用适当句子予以填充。
VoidInitCycQueue(CycqueueTp*sq)
{___;sq->rear=0;}
21.以下运算实现在循环队上的入队列,请在处用请适当句子予以填充。
IntEnCycQueue(CycquereTp*sq,DataTypex)
{_if((__sq->rear+1)%max==_
sq->front)
{error(“队满”);return(0);
else{sq->base[sq->rear]=X;
sq->rear=(sq->rear+1)%max;
return
(1);
}
22.以下运算实现在循环队上的出队列,请在处用适当句子予以填充。
IntOutCycQueue(CycquereTp*sq,DataType*x){if(){error(“队
空”);return(0);}
else{___*x=[sq->base[sq->front]];
_sq->front=(sq->front+1)%Max;
return
(1);
}
}
23.以下运算实现在循环队上判队空,请在处用适当句子予以填充。
IntEmptyCycQueue(CycqueueTpsq)
{if()return
(1);
elsereturn(0);
}
24.以下运算实现在循环队上取队头,请在处用适当句子予以填充。
IntGetHead(CycqueueTpsq,DataType*x)
{if(sq.rear==return(0);
else{*x=sq.data[_sq.front];
return
(1);
}
25.链队在一定范围内不会出现
的情况。
当lq.front==lq.rear试,队中无元素,此
时。
26.以下运算实现在链队上的初始化,请在处用适当句子予以填充。
voidInitQueue(QueptrTp*lp){LqueueTp*p;
p=(LqueueTp*)malloc(sizeof(LqueueTp));
5
lq->rear=p;
(lq->front)->next=;
}
27.以下运算实现在链队上的入队列,请在处用适当句子予以填充。
VoidEnQueue(QueptrTp*lq,DataTypex){LqueueTp*p;
p=(LqueueTp
*)malloc(sizeof(LqueueTp));
=x;p->next=NULL;
(lq->rear)->next=;
■
5
}
28.以下运算实现在链队上的出队列,请在
处用适当句子予以填充。
intOutQueue(QuetrTp*lq,DataType*x){LqueueTp*s;
if(lq->front==lq->rear){erroe(“队空”);
return(0);}
else{s=(lq->front)->next;
=s->data;
(lq->front)->next=;
if(s->next==NULL)lq->rear=lq->front;
free(s);
return
(1);
}
}
29.以下运算实现在链队上判队空,请在处用适当句子予以填充
intEmptyQueue(QueptrTp*lq)
{if()return
(1);
elsereturn(0);
}
30.以下运算实现在链队上读队头元素,请在
处用适当句子予以填充。
IntGetHead(QueptrTplq,DataType*x){LqueueTp*p;
if(lq.rear==lq.front)return(0);
else{;
=p->data;return
(1);
}
}
31.一般地,一个n维数组可视为其数据元素为维数组的线性表。
数组通常只有和两种基本运算。
32,通常采用存储结构来存放数组。
对
二维数组可有两种存储方法:
一种是以
为主序的存储方式,另一种是以为主序的
存储方式。
C语言数组用的是以为主序
的存储方法;FORTRA语言用的是以为
主序的存储方法
33.需要压缩存储的矩阵可分为矩阵和
矩阵两种。
34.对称方阵中有近半的元素重复,若为每一对元素
只分配一个存储空间,则可将n2个元素压缩存储到元素的存储空间中。
35•假设以一维数组M(1:
n(n+1)/2)作为n阶对称
矩阵A的存储结构,以行序为主序存储其下三角(包括对角线)中的元素,数组M和矩阵A间对应的关系为。
36•上三角矩阵中,主对角线上的第t行(1<=t<=n)
有元素,按行优先顺序存放上三角矩阵
中的元素aj时,aj之前的前i-1行共有
个元素,在第i行上,aij是该行的第个
兀素,M[k]和aij的对应关系是。
当i>j时,aj=c,c存放在M[]中。
37•下三角矩阵的存储和对称矩阵类似。
M[K]和aj的
对应关系是。
38•基于三元组的稀疏矩阵转置的处理方法有两种,
以下运算按照矩阵A的列序来进行转置,请在用适当的句子用以填充。
Trans_Sparmat(SpMatrixTpa,SpMatrixTp*b)
{(*b).mu=a.nu;(*b).nu=a.mu;(*b).tu=a.tu;if(a.tu)
{q=1;
for(col=1;;col++)
for(p=1;p<=a.tu;p++)
if(==col)
{(*b).data[q].i=a.data[p].j;
(*b).data[q].j=a.data[p].i;
(*b).data[q].v=a.data[p].v;
}
}
39.基于三元组的稀疏矩阵转置的处理方法有两种,以下计算按照矩阵A的三元组a.data的次序进行转置,请在处用适当的句子用以填充。
Fast_Trans_Sparmat(SpMatrixTpa,SpMatrixTp*b)
{(*b).mu=a.nu;(*b).nu=a.mu;(*b).tu=a.tu=a.tu;
if(a.tu)
{for(col=1;;col++)
num[col]=0;
for(t=1;t<=a,tu;t++)
num[a.data[t].j]++;
cpot[1]=1;
for(col=2;col<=a.nu;col++)
cpot[col]=;
for(p=1;p<=a.tu;p++)
{col=a.data[p].j;
q=cpot[col];
(*b).data[q].i=a.data[p].j;
(*b).data[q].j=a.data[p].i;
(*b).data[q].v=a.data[p].v;
}
}
}
40.栈称为线性
■
41.队称为线性表。
42设一个链栈的栈顶指针为ls,栈中结点的格式为infonext,栈空的条件是;如果栈
不为空,则退栈操作为p=ls;;ls=ls->next;free(p)。
43•设有二为数组intM[10][20](注:
m为
0...10,n为0...20),每个元素(整数)栈两个存储单元,数组的起始地址为2000,元素M[5][10]的存储位置为,M[8][19]的存储值为。
44.在具有n个单元的循环队列中,队满时共
有个元素。
45.可以作为实现递归函数调用的
一种数据结构。
46•数组M中每个元素的长度是3个字节,行下标i从1到8,列下标j从1到0,从首的址EA开始连续存放在存储其中。
若按行方式存放,元素M[8][5]的起始地址为;若按列优先方式存放,元
素M[8][5]的地址为。
47.对带有头结点的列队列lq,判定队列中只
有一个数据元素的条件是__lq->front->next=lq->rear。
lq->front->next->next=
NULL。
48•二维数组M的成员是6个字符(每个字符栈一个存储单元)组成的串,行下标i的范围从0到8,列下标j的范围从1到10,则存放M至少需要个字节;M的第8列和第5行共占字节;若M按行方式存储,元素M[8][5]的起始地址与当M按列优先方式存储时的元素的起始地址一致。
三、单项选择题
1•在以下栈的基本运算中,不是加工型运算的是
()
1lnitStack(S)②Push(S,X)③Pop(S)④empty(S)
2.以下说法正确的是()
1因链栈本身没有容量限制,故在用户内存空间的范围内不会出现栈满情况
2因顺序栈本身没有容量限制,故在用户内存空间的范围内不会出现栈满情况
3对于链栈而言,在栈满状态下,如果此时再作进栈运算,则会发生“上溢”
4对于顺序栈而言在栈满状态下如果此时再作迸栈运算,则会发生“下溢”。
3.在以下队列的基本运算中,不是加工型运算的是()
1InitQueue(Q)②EnQueue(Q,X)③OutQueu(Q,X)④GetHead(Q,x)
4.顺序队列的人队操作应为()
1sq.rear=sq.rear+1sq.data[sq.rear]=x
2sq.data[sq.rear]=x
sq.rear=sq.rear+1
3sq.rear=(sq.rear+1)%maxsize;sq.data[sq.rear]=x
4sq.data[sqrear]=x
sq.rear=(sq.rear+1)%maxsize
5.循环队列的人队操作应为()
1sq.rear=sq.rear+1sq.data[sq.rear]=x
2sq.data[sq.rear]=x
sq.rear=sq.rear+1
3sq.rear=(sq.rear+1)%maxsize
sq.data[sq.rear]=x
sq.data[sq.rear]=x
sq.rear=(sq.rear+1)%maxsize
6.顺序队列的出队操作为()
1sq.front=(sq.front+1)%maxsize
2sq.front=sq.front+1
3sq.rear=(sq.rear+1)%maxsize
4sq.rear=sq.rear+1
7.循环队列的出队操作为()
1sq.front=(sq.front+1)%maxsize
2sq.front=sq.front+1
3sq.rear=(sq.rear+1)%maxsize
4sq.rear=sq.rear+1
8.循环队列的队满条件为()
1(sq.rear+1)%mazsize==(sq.front+1)maxsize;
2(sq.rear+1%maxsize==sq.front+1
3sq.(rear+1)%maxsize==sq.front
4sq.rear==sq.front
9.循环队列的队空条件为()
1(sq.rear+1)%maxsize==(sq.front+1)maxsize
2(sq.rear+)%maxsize==sq.front+1
3(sp.rear+1)%maxsize==sq.front
4sq.rear==sq.front
10.数组的数据元素类型DataType可根据实际需要而定义。
以下说法完全正确的是()①数组的读运算可以读取一个数据元素整体,写运算只能修改一个数据元素的一部分
2数组的读、写运算可以读取或修改一个数据元素的一部分或一个整体
3数组的读、写运算只能读取或修改一个数据元素的
一部分
4数组的读、写运算只能读取或修改一个数据元素整
体
11.对于以行序为主序的存储结构来说,在数组
A[ci•…di,C2…d2]中,cl和di分别为
数组A的第一个下标的上、下界,C2…d2分别为第二各下标的上、下界,每个数据元素占K个存储单元,二维数组中任一元素a[i,j]的存储位置可由()式确定.
1Loc[i,j]=[(d2-c2+1)(i-ci)+(j-c2)]*k
2Loc[i,j]=loc[ci,c2]+[(d2-c2+i)(i-ci)+(j-
c2)]*k
3
i,c2]+[(d2-c2+i)(i-ci)+(j-c2)]*k
Loc{i,j}=A[c
④Loc[i,j]=loc[0,0]+[(d2-C2+1)(i-ci)=(j-C2)]*k
12对于C语言的二维数组DataTypeA[m][n],每个数
据元素占K个存储单元,二维数组中任意元素a[i,j]
的存储位置可由()式确定.
①Loc[i,j]=A[m,n]+[(n+1)*i+j]*k
②Loc[i,j]=loc[0,0]+[(m+n)*i+j]*k
③Loc[i,j]=loc[0,0]+[(n+1)*i+j]*k
④Loc[i,j]=[(n+1)*i+j]*k
13.线性表的顺序存储结构是一种
()的存储结构,
线性表的链式存储结构是一种(
)的存储结构。
①随机存取
②顺序存储
14.如果以链表作为栈的存储结构,
则退栈操作是
()
1必须判别栈是否满②必须判别栈是否空
③判别栈元素的类型④对栈不做任何操作
15对于基于三元组的稀疏矩阵转置的处埋方法以下说法正确的是()
1按照矩阵A的列序来进行转置,算法的时间复杂度
为0(nu+tu)
2按照A的三元组a.data的次序进行转置,算法的时
间复杂度为O(nu*tu)
3按照矩阵A的列序来进行转置的方法称快速转置
④按照矩阵A的列序进行转置,对于tu< 16.稀疏矩阵的压缩存储方法是只存储() ①非零元素②三元祖(i,j,ao) ③aij④i,j 17.基于三元组的稀疏矩阵,对每个非零元素aij,可 以用一个()唯一确定。 ①非零元素②三元组(i,j,aij)③ aij④i,j 18如果以链表作为栈的存储结构,则退栈操作时 () 1必须判别栈是否满②判别栈元素的类型 ③必须判别栈是否空④队栈不做任何判别 19•设C语言数组Data[m+1]作为循环队列SQ的存储 空间,front为队头指针,rear为队为指针,则执行 出队操作 的 语句为 () ①front=front+1 ②front= (front+1)%m ③rear=(rear+1)%m ④ front=(front+1)%(m+1) 20.三角矩阵可压缩存储到数组()中。 ①M[1: n(n+1)/2+1]② M[1: n(n+1)/2] 3M[n(n+1)/2+1]④M[n(n+1)/2] 21.设有一顺序栈S,元素si,s2,s3,s4,s5,s6依次进栈,如果6个元素出线的顺序是S2,s3,s4,s6,s5,s1,则栈 的容 () 量至少应该是 ①2 ④6 ②3③5 22•设有一顺序栈已含3个元素,如下图所示,元素a4正等待进栈。 那么下列4个序列 中不可 () 能出现的出栈序列是 0123 maxsize-1 a1a2a3sq top ①a3,a1,a4,a2②a3,a2,a4,a1③ a3,a4,a2,a1④a4,a3,a2,a1 23.向一个栈顶指针为Top的链中插入一个s所指结点 时,其操作步骤为() 1Top->next=s 2s->next=Top->next;Top->next=s 3s->next=Top;Top=s 4s->next=Top;Top=Top->next 24.从栈顶指针为Top的链栈中删除一个结点,并将被删节点的值保存到x中,其操作步骤为() 1x=Top->data;Top=Top->next 2Top=Top->next;x=Top->data 3x=Top;Top=Top->next 4x=Top->data 25.在一个链队中,若f,r分别为队首、队尾指针,则 插入s所指结点的操作为() 1f->next=c;f=s 2r->next=s;r=s 3s->next=r;r=s 4s->next=f;f=s 26常对数组进行的两种基本操作是() 1建立与删除②索引与修改③查找与修改④查找与索引 27.链栈与顺序栈相比,有一个比较明显的优点即 () ①插入操作更方便 2通常不会出现栈满的情况 3不会出现栈空的情况 4删除操作更方便 28.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点() ①正确②错误 29。 二为数组M[i,j]的元素是4个字符(每个字符占 一个存储单元)组成的串,行下标i的范围从0到4,列下标j的范围从0到5°M胺行存储时元素M[3,5]的 起始地址与M按列存储时元素()的起始地址相同。 ①M[2,4]②M[3,4]③M[3,5] 4M[4,4] 30.一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是() ①edcba②decba③ 32.设计一个判别表达式中左、右括号是否配对出线 的算法,采用()数据结构最佳。 ①线性标的顺
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 队列 数组 自测 试题