数据结构栈和队列学习资料.docx

上传人:b****9 文档编号:24999905 上传时间:2023-06-03 格式:DOCX 页数:18 大小:23.63KB
下载 相关 举报
数据结构栈和队列学习资料.docx_第1页
第1页 / 共18页
数据结构栈和队列学习资料.docx_第2页
第2页 / 共18页
数据结构栈和队列学习资料.docx_第3页
第3页 / 共18页
数据结构栈和队列学习资料.docx_第4页
第4页 / 共18页
数据结构栈和队列学习资料.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构栈和队列学习资料.docx

《数据结构栈和队列学习资料.docx》由会员分享,可在线阅读,更多相关《数据结构栈和队列学习资料.docx(18页珍藏版)》请在冰豆网上搜索。

数据结构栈和队列学习资料.docx

数据结构栈和队列学习资料

 

数据结构:

栈和队列

单选题:

1.在一个具有n个单元的顺序栈中,假定以地址低端作为栈底,以top作为栈顶指针,则当做退栈处理时,top变化为_____。

A.top不变B.top=-nC.top=top-1D.top=top+1

2.向顺序栈中压入元素时,是_____。

A.先移动栈顶指针,后存入元素B.先存入元素,后移动栈顶指针

3.在一个顺序存储的循环队列中,队首指针指向队首元素的_____。

A.前一个位置B.后一个位置C.队首元素位置

4.若进栈序列为1,2,3,4,进栈过程中可以出栈,则_____不可能是一个出栈序列。

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

5.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队首指针和队尾指针,则判断队空的条件是_____。

A.front==rear+1B.front+1==rearC.front==rearD.front==0

6.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队首指针和队尾指针,则判断队满的条件是_____。

A.\rear%n==frontB.(rear-1)%n==frontC.(rear-1)%n==rearD.(rear+1)%n==front

7.向一个栈项指针为hs的链栈中插入一个*s结点时,则执行_____。

A.hs->next=s;B.s->next=hs->next;hs->next=s;

C.s->next=hs;hs=s;D.s->next=hs;hs=hs->next;

8.在一个链队列中,假定front和rear分别为队首指针和队尾指针,则进行插入*s结点的操作时应执行_____。

A.front->next=s;front=s;B.rear->next=s;rear=s;C.front=front->next;D.front=rear->next;

9.栈的特点是_______队的特点是______

A.先进先出B.先进后出B|A

10.栈和队列的共同点是_______。

A.都是先进后出B.都是先进先出C.只允许在端点处插入和删除元素D.没有共同点

11.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是________。

A.edcbaB.decbaC.dceabD.abcde

12.若己知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi(1

A.iB.n=IC.n-i+1D.不确定

13.若己知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若pn=n,则pi(i<=i

A.iB.n=IC.n-i+1D.不确定

14.若己知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=3,则p2_______。

A.可能是2B.一定不是2C.可能是1D.一定是1

15.若己知一个栈的进栈序列p1,p2,p3,…,pn,输出序列是1,2,3,…,n,若p3=1,则p1________。

A.可能是2B.一定是2C.不可能是2D.不可能是3

16.若己知一个栈的进栈序列p1,p2,p3,…,pn,输出序列是1,2,3,…,n,若p3=1,则p1________。

A.n-i+1B.n-iC.iD.有多种可能

17.判定一个顺序栈st(最多元素为MaxSize)为空的条件是_______。

A.st->top!

=-1B.st->top==-1C.st->top!

=MaxSize-1D.st->top==MaxSize-1

18.判定一个顺序栈st(最多元素为MaxSize)为栈满的条件是_______。

A.st->top!

=-1B.st->top==-1C.st->top!

=MaxSize-1D.st->top==MaxSize-1

19.最不适合用作链栈的链表是________。

A.只有表头指针没有表尾指针的循环双链表B.只有表尾指针没有表头指针的循环双链表C.只有表尾指针没有表头指针的循环单链表D.只有表头指针没有表尾指针的循环单链表

20.向一个栈项指针为hs的链栈中插入一个s所指结点时,则执行_______。

A.hs->next=s;B.s->next=hs->next;hs->next=s;C.s->next=hs;hs=s;D.s->next=hs;hs=hs->next;

21.从一个栈项指针为hs的链栈中删除一个结点时,用x保存被删结点的值,则执行______。

A.x=hs;hs=hs->next;B.x=hs->data;C.hs=hs->next;x=hs->data;D.x=hs->data;hs=hs->next;

22.一个队列的入队序列是1,2,3,4,则队列的输出序列是_______。

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

23.判定一个环形队列qu(最多元素为MaxSize)为空的条件是________。

A.qu->rear-qu->front==MaxSizeB.qu->rear-qu->front-1==MaxSize

C.qu->front==qu->rearD.qu->front==qu->rear+1

24.判定一个环形队列qi(最多元素为MaxSize)为满队列的条件是________。

A.(qu->rear+1)%MaxSize==qu->frontB.qu->rear-qu->front-1==MaxSize

C.qu->front==qu->rearD.qu->front==qu->rear+1

25.环形顺序队列中是否可以插入下一个元素,________。

A.与队头指针的队尾指针的值有关B.只与队尾指针的值有关,与队头指针的值无关

C.只与数组大小有关,与队首指针和队尾指针的值无关D.与曾经进行过多少次插入操作有关

26.环形队列用数组A[0...MaxSize-1]存放其元素值,己知其头尾指针分别是front和rear,则当前队列的元素个数是_______。

A.(rear-front+MaxSize)%MaxSizeB.rear-front+1

C.(rear-front-1)%MaxSizeD.(rear-front)%MaxSize

27.若用一个大小为6的一维数组来实现环形队列,且当前rear和front的值分别为0和3。

当从队列中删除一个元素,再加入两个元素后,rear和front的值分别是______。

A.1和5B.2和4C.4和2D.5和1

28.最不适合用作链队的链表是______。

A.只带队头指针的非循环双链表B.只带队头指针的循环双链表C.只带队尾指针的循环双链表D.只带队尾指针的循环单链表

29.在一个链队中,假设f和r分别为队头和队尾指针,则插入s所指结点的运算是_______。

A.f->next=s;f=s;B.r->next=s;r=s;C.s->next=r;r=s;D.s->next=f;f=s;

30.在一个链队中,假设f和r分别为队头和队尾指针,则删除一个结点的运算是_______。

A.r=f->next;B.r=r->next;C.f=f->next;D.f=r->next;

31.用单链表表示的链队的队头在链用不着的________位置。

A.链头B.链尾C.链中D.任意

32.中缀表达式A*(B+C)/(D-E+F)的后缀表达式是________。

A.A*B+C/D-E+FB.AB*C+D/E-F+C.ABC+*DE-+/D.ABCDEF*+/-+

33.己知一个栈的进栈序列是ABC,出栈序列为CBA,经过的栈操作是________。

A.push,pop,push,pop,push,popB.push,push,push,pop,pop,pop

C.push,push,pop,pop,push,popD.push,pop,push,push,pop,pop

34.判定一个顺序栈st为(元素个数最多为MaxSize)空的条件为______。

A.st.top==-1B.st.top!

=-1C.st.top!

=MaxSizeD.st.top==MaxSize

35.判定一个顺序栈st(元素个数最多为MaxSize)为栈满的条件是______。

A.st.top!

=-1B.st.top==-1C.st.top!

=MaxSize-1D.st.top==MaxSize-1

36.表达式a*(b+c)-d的后缀表达式是______。

A.abcd*+-B.abc+*d-C.abc*+d-D.-+*abcd

37.表达式(2+2*3)*2+6*3/2的后缀表达式是______。

A.223*+2*63*2/+B.22*3+2*63*2/+C.223*2*63*+2/+

D.223*+263*2/+*

38.链栈与顺序栈相比有一个明显的优点,即______。

A.插入操作更方便B.通常不会出现栈满的情况C.不会出现栈空的情况D.删除操作更加方便

39.最不适合用作链栈的链表是______。

A.只有表头指针没有表尾指针的循环双链表B.只有表尾指针没有表头指针的循环双链表

C.只有表尾指针没有表头指针的循环单链表D.只有表头指针没有表尾指针的循环单链表

40.如果以链表作为栈的存储结构,则退链栈操作时______。

A.必须判别栈是否满B.判别链栈元素的类型C.必须差别链栈是否空

D.对链栈不作任何差别

41.向一个不带头结点的栈指针为1st的链栈中插入一个s所指结点时,则执行______。

A.1st->next=s;B.s->next=1st->next;1st->next=s;

C.s->next=1st;1st=s;D.s->next=1st;1st=1st->next;

42.从一个不带头结点的栈顶指针为1st的链栈中删除一个结点时,用x保存被删结点的值,则执行______。

A.x=1st;1st=1st->next;B.x=1st->data;

C.1st=1st->next;x=1st->data;D.x=1st->data;1st=1st->next;

43.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是______.

A.edcbaB.decbaC.dceabD.abcde

44.在一个长度为n的顺序存储的集合中查找值为x的元素时,在等概率情况下,查找成功时的平均查找长度为_________。

A.nB.n/2C.(n+1)/2D.(n-1)/2

45.在一个长度为n的链接存储的集合中查找值为x的元素时,算法的时间复杂度为_________。

A.O

(1)B.O(n)C.O(n*n)D.O(lbn)

46.已知一个元素x不属于一个长度为n的顺序或链接存储的集合S中的元素,把它插入集合S时不进行比较过程,则插入过程的时间复杂度为_________。

A.O

(1)B.O(lbn)C.O(n)D.O(n*n)

47.设一个具有t个非零元素的m*n大小的稀疏矩阵采用顺序存储,求其转置矩阵的普通转置算法的时间复杂度为_________。

A.O(m)B.O(n)C.O(n+t)D.O(n*t)

判断题:

1.栈底元素是不能删除的元素。

F

2.顺序栈中元素值的大小是有序的。

F

3.在n个元素进栈后,它们的出栈顺序和进栈顺序一定正好相反。

T

4.栈顶元素和栈底元素有可能是同一个元素。

T

5.若用S[1]-S[m]表示顺序栈的存储空间,则对栈的进栈、出栈操作最多只能进行m次。

F

6.栈没有栈顶指针。

F

填空题:

1.在具有n个单元、顺序存储的循环队列中,队满时共有______个元素。

n-1

2.栈和队列的区别仅在于________。

删除运算的不同

3.通常元素进栈的操作是________。

先移动栈顶指针,后存入元素

4.通常元素退栈的操作是________。

先取出元素,后移动栈顶指针

5.一个栈的输入序列是12345,则栈的输出序列432512是__________。

不可能的

6.一个栈的输入序列是12345,则栈的输出序列12345是________。

可能的

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

3

8.设栈采用顺序存储结构,若己知i-1个元素进栈,则将第i个元素进栈时,进栈算法的时间复杂度为________。

O

(1)

9.若用不带头结点的单链表来表示链栈S,则创建一个空栈所要执行的操作是________。

S=NULL

10.从环形队列中插入一个元素时,通常的操作是________。

先存放元素,后移动队尾指针

11.从环形队列中插入一个元素时,通常的操作是________。

从环形队列中插入一个元素时,通常的操作是________。

MaxSize-1

12.在链表qu中,判定只有一个结点的条件是________。

qu->front==qu->rear&&qu->front!

=NULL

13.设栈S和队列Q的初始状态为空,元素a1,a2,a3,a4,a5,a6,a7和a8依次通过栈S,一个元素出栈后立即进入队列Q,若8个元素出队列的顺序是a3,a6,a7,a5,a8,a4,a2,a1,则栈S的容量至少应该是多少(即至少应该容纳多少个元素)?

5

14.设有算术表达式x+a*(y-b)-c/d,该表达式的前缀表达为________。

后缀表示为______。

-+x*a-yb/cd|xayb-*+cd/-

15.栈是一种具有______特性的线性表。

后进先出

16.顺序栈和链栈的区别仅在于______的不同。

存储结构

17.如果栈的最大长度难以估计,则最好使用______。

链栈

18.一个栈的输入序列是12345,则栈的输出序列12345是______。

可能的

19.设栈采用顺序存储结构,若己知i-1个元素进栈,则将第i个元素进栈时,进栈算法的时间复杂度为______。

O

(1)

20.表达式23+((12*3-2)/4+34*5/7)+108/9的后缀表达式是______。

23123*2-4/345*7/++1089/+

21.若用不带头结点的单链表来表示链栈1st,则创建一个空栈所要执行的操作是______。

1st=NULL

22.对于链栈1st,进栈操作在______端进行,出栈操作在_____端进行。

链栈头|链栈头

23.将递归算法转换为非递归算法时,通常使用______这种数据结构。

24.有如下递归算法:

voidprint(intw)

{inti;

if(w!

=0)

{print(w-1);

for(i=1;i<=w;i++)

printf("%3d",w);

printf("\n");

}

}

调用语句printf(4)的结果是______。

1223334444

25.有如下递归过程:

voidreverse(intm)

{

printf("%d",n%10);

if(n/10!

=0)

reverse(n/10);

}

调用语句reverse(582)的结果是______。

285

26.求顺序存储的集合的长度的时间复杂度为____________。

O

(1)

27.求链接存储的集合的长度的时间复杂度为____________。

O(n)

28.设集合S的长度为n,则判断x是否属于集合S的时间复杂度为____________O(n)

29.在稀疏矩阵的顺序存储中,利用一个数组来存储非零元素,该数组的长度应____________对应三元组线性表的长度。

大于等于

算法分析题:

1.设计一个算法,利用栈的基本运算将指定栈中的内容进行逆转。

答:

、statusNizhuan(sqstacks,inta,intb,intt)

{

If(s.top==s.base)

error(‘nodata’);

for(i=0;i

{

a=*--top;

b=*s.base;

a=t;t=b;b=a;

s.top--;

s.base++;

}

}

2.设计一个算法,利用栈的基本运算返回指定栈中的栈底元素。

答:

statusGetbase(Aqstacks,int&e)

{

If(s.top==s.base)

Error(‘nodata’)

else

e=*s.base;

returne;

}

3.有两个栈s1和s2共享存储空间c[1..MaxSize],其中一个栈底设在c[1]处,另一个栈底设在c[MaxSize]处,分别编写s1和s2的进栈push(i,x)、退栈pop(i)和设置栈空setnull(i)的函数,其中i=1,2。

注意:

仅当整个空间c[1..MaxSize]占满时才产生上溢。

答:

(1)初始化操作

【共享栈的初始化】

intinitDupStack(dupsqstack*s)

{/*创建两个共享邻接空间的空栈由指针S指出*/

if((s=(dupsqstack*)malloc(sizeof(dupsqstack)))==NULL)

returnFALSE;

s->lefttop=-1;

s->righttop=MAXNUM;

returnTRUE;

}

(2)入栈操作

【共享栈的入栈操作】

intpushDupStack(dupsqstack*s,charstatus,Elemtypex)

{*把数据元素x压入左栈(status=’L’)或右栈(status=’R’)*/

if(s->lefttop+1==s->righttop)

returnFALSE;/*栈满*/

if(status=’L’)

s->stack[++s->lefttop]=x;/*左栈进栈*/

else

if(status=’R’)

s->stack[--s->lefttop]=x;/*右栈进栈*/

else

returnFALSE;/*参数错误*/

returnTRUE;

}

(3)出栈操作

【共享栈的出栈操作】

ElemtypepopDupStack(dupsqstack*s,charstatus)

{/*从左栈(status=’L’)或右栈(status=’R’)退出栈顶

4.用不带头结点的单链表存储链栈,设计初始栈、判断栈是否为空、进栈和出栈等相应的算法。

答:

(1)入栈操作

【单个链栈的入栈操作】

intpushLstack(slStacktype*top,Elemtypex)

{//将元素x压入链栈top中

slStacktype*p;

if((p=(slStacktype*)malloc(sizeof(slStacktype)))==NULL)

returnFALSE;//申请一个结点

p->data=x;

p->next=top;

top=p;

returnTRUE;

}

(2)出栈操作

【单个链栈的出栈操作】

ElemtypepopLstack(slStacktype*top)

{//从链栈top中删除栈顶元素

slStacktype*p;

Elemtypex;

if(top==NULL)

returnNULL;//空栈

p=top;

top=top->next;

x=p->data;

free(p);

returnx;

}

问答题:

1.试述栈的基本性质?

解答:

由栈的定义可知,这种结构的基本性质综述如下:

(1)集合性。

栈是由若干个元素集合而成,当没有元素的空集合称为空栈;

(2)线性结构。

除栈底元素和栈顶元素外,栈中任一元素均有唯一的前驱元素和后继元素;

(3)受限制的运算。

只允许在栈顶实施压入或弹出操作,且栈顶位置由栈指针所指示;

(4)数学性质。

当多个编号元素依某种顺序压入,且可任意时刻弹出时,所获得的编号元素排列的数目,恰好满足卡塔南数列的计算,即:

Cn=Cn2n/(n+1)

其中,n为编号元素的个数,Cn是可能的排列数目。

2.何谓队列的上溢现象?

解决它有哪些方法,且分别简述其工作原理。

解答:

在队列的顺序存储结构中,设队头指针为front,队尾指针为rear,队的容量(存储空间的大小)为m。

当有元素要加入队列时,若rear=m(初始时reat=0),则发生队列的上溢现象,该元素不能加入队列。

这里要特别注意的是:

队列的假溢出现象,队列中还有空余的空间,但元素不能进队列。

造成这种现象的原因是由于队列的操作方式所致。

解决队列的上溢有以下几种方法:

(1)建立一个足够大的存储空间,但这样做往往会造成空间使用的效率低。

(2)当出现假溢出时,可采用以下几种方法:

①采用平移元素的方法。

每当队列中加入一个元素时,队列中已有的元素向队头移动一个位置(当然要有空余的空间可移);

②每当删去一个队头元素时,则依次序移队中的元素,始终使front指针指向队列中的第一个位置;

③采用循环队列方式。

把队头队尾看成是一个首尾相邻的循环队列,虽然物理上

假定用一个循环单链表表示队列(称此为循环链队),该队列只设一个队尾指针,不设队首指针,试编写下列算法:

(1)向循环链队插入一个元素为x的结点。

(2)从循环链队中删除一个结点(假定不需要保留被删除结点的值和不需要回收结点)。

3.假定用一个循环单链表表示队列(称此为循环链队),该队列只设一个队尾指针,不设队首指针,试编写下列算法:

(1)向循环链队插入一个元素为x的结点。

(2)从循环链队中删除一个结点(假定不需要保留被删除结点的值和不需要回收结点)

解答:

(1)解答:

statusinsert(Rear,x){

//假定Rear为循环链队的队尾指针,x为待插入的元素

(1)malloc(p);

p->data=x;//建立值为x的新结点p^

(2)if(Rear=nil){

Rear=p;Rear->next=p;

}

else

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

当前位置:首页 > 工程科技 > 环境科学食品科学

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

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