文档库 最新最全的文档下载
当前位置:文档库 › 数据结构考研真题 栈和队列

数据结构考研真题 栈和队列

数据结构考研真题 栈和队列
数据结构考研真题 栈和队列

第3章栈和队列

一选择题

1. 对于栈操作数据的原则是()。【青岛大学 2001 五、2(2分)】

A. 先进先出

B. 后进先出

C. 后进后出

D. 不分顺序

2. 在作进栈运算时,应先判别栈是否( ① ),在作退栈运算时应先判别栈是否( ② )。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为( ③ )。

为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的( ④ )分别设在这片内存空间的两端,这样,当( ⑤ )时,才产生上溢。

①, ②: A. 空 B. 满 C. 上溢 D. 下溢

③: A. n-1 B. n C. n+1 D. n/2

④: A. 长度 B. 深度 C. 栈顶 D. 栈底

⑤: A. 两个栈的栈顶同时到达栈空间的中心点.

B. 其中一个栈的栈顶到达栈空间的中心点.

C. 两个栈的栈顶在栈空间的某一位置相遇.

D. 两个栈均不空,且一个栈的栈顶到达另一个栈的栈底.

【上海海运学院 1997 二、1(5分)】【上海海运学院 1999 二、1(5分)】

3. 一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是()。

A. 不确定

B. n-i+1

C. i

D. n-i

【中山大学 1999 一、9(1分)】

4. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是()。

A. i-j-1

B. i-j

C. j-i+1

D. 不确定的

【武汉大学 2000 二、3】

5. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p

1,p

2

,p

3

,…,p

N

,若p

N

是n,则

p

i

是( )。

A. i

B. n-i

C. n-i+1

D. 不确定

【南京理工大学 2001 一、1(1.5分)】

6. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?()

A. 5 4 3 6 1 2

B. 4 5 3 1 2 6

C. 3 4 6 5 2 1

D. 2 3 4 1 5 6

【北方交通大学 2001 一、3(2分)】

7. 设栈的输入序列是1,2,3,4,则()不可能是其出栈序列。【中科院计算所2000一、10(2分)】

A. 1,2,4,3,

B. 2,1,3,4,

C. 1,4,3,2,

D. 4,3,1,2,

E. 3,2,1,4,

8. 一个栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈的输出序列的是()。

A. 2 3 4 1 5

B. 5 4 1 3 2

C. 2 3 1 4 5

D. 1 5 4 3 2

【南开大学 2000 一、1】【山东大学 2001 二、4 (1分)】【北京理工大学 2000 一、2(2分)】

9. 设一个栈的输入序列是 1,2,3,4,5,则下列序列中,是栈的合法输出序列的是()。

A. 5 1 2 3 4

B. 4 5 1 3 2

C. 4 3 1 2 5

D. 3 2 1 5 4

【合肥工业大学 2001 一、1(2分)】

10. 某堆栈的输入序列为a, b,c ,d,下面的四个序列中,不可能是它的输出序列的是

()。

A. a,c,b,d

B. b, c,d,a

C. c, d,b, a

D. d, c,a,b

【北京航空航天大学 2000 一、3(2分)】【北京邮电大学 1999 一、3(2分)】

11. 设abcdef以所给的次序进栈,若在进栈操作时,允许退栈操作,则下面得不到的序列为()。

A.fedcba B. bcafed C. dcefba D. cabdef

【南京理工大学 1996 一、9(2分)】

12. 设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是( )。

A.XYZ B. YZX C. ZXY D. ZYX

【南京理工大学 1997 一、5(2分)】

13. 输入序列为ABC,可以变为CBA时,经过的栈操作为()【中山大学 1999 一、8(1分)】

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

B. push,push,push,pop,pop,pop

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

D. push,pop,push,push,pop,pop

14. 若一个栈以向量V[1..n]存储,初始栈顶指针top为n+1,则下面x进栈的正确操作是( )。

A.top:=top+1; V [top]:=x B. V [top]:=x; top:=top+1

C. top:=top-1; V [top]:=x

D. V [top]:=x; top:=top-1

【南京理工大学 1998 一、13(2分)】

15. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。

A. |top[2]-top[1]|=0

B. top[1]+1=top[2]

C. top[1]+top[2]=m

D. top[1]=top[2]

【南京理工大学 1999 一、14(1分)】

16. 栈在()中应用。【中山大学 1998 二、3(2分)】

A. 递归调用

B. 子程序调用

C. 表达式求值

D. A,B,C

17. 一个递归算法必须包括()。【武汉大学 2000 二、2】

A. 递归部分

B. 终止条件和递归部分

C. 迭代部分

D.终止条件和迭代部分

18. 执行完下列语句段后,i值为:()【浙江大学 2000 一、6 (3分)】

int f(int x)

{ return ((x>0) ? x* f(x-1):2);}

int i ;

i =f(f(1));

A.2 B. 4 C. 8 D. 无限递归

19. 表达式a*(b+c)-d的后缀表达式是( )。【南京理工大学 2001 一、2(1.5分)】

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

20. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂。

A. 3,2,4,1,1;(*^(+*-

B. 3,2,8;(*^-

C. 3,2,4,2,2;(*^(-

D. 3,2,8;(*^(-

【青岛大学 2000 五、5(2分)】

21. 设计一个判别表达式中左,右括号是否配对出现的算法,采用()数据结构最佳。

A.线性表的顺序存储结构 B. 队列 C. 线性表的链式存储结构 D.

【西安电子科技大学 1996 一、6(2分)】

22. 用链接方式存储的队列,在进行删除运算时()。【北方交通大学 2001 一、12(2

分)】

A. 仅修改头指针

B. 仅修改尾指针

C. 头、尾指针都要修改

D. 头、尾指针

可能都要修改

23. 用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结

点,则在进行删除操作时( )。【北京理工大学 2001 六、3(2分)】

A.仅修改队头指针 B. 仅修改队尾指针

C. 队头、队尾指针都要修改

D. 队头,队尾指针都可能要修改

24. 递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。

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

【福州大学 1998 一、1(2分)】

25. 假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中

的元素个数为()。【北京工商大学 2001 一、2(3分)】

A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m

D.(rear-front)%m

26. 循环队列A[0..m-1]存放其元素值,用front和rear分别表示队头和队尾,则当前队

列中的元素数是( )。【南京理工大学 2001 一、5(1.5分)】

A. (rear-front+m)%m

B. rear-front+1

C. rear-front-1

D.

rear-front

27. 循环队列存储在数组A[0..m]中,则入队时的操作为()。【中山大学 1999 一、6

(1分)】

A. rear=rear+1

B. rear=(rear+1) mod (m-1)

C. rear=(rear+1) mod m

D. rear=(rear+1)mod(m+1)

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

队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( )【浙江大

学1999 四、1(4分)】

A. 1和 5

B. 2和4

C. 4和2

D. 5和1

29. 已知输入序列为abcd 经过输出受限的双向队列后能得到的输出序列有()。

A. dacb

B. cadb

C. dbca

D. bdac

E. 以上答案都不对

【西安交通大学 1996 三、3 (3分)】

30. 若以1234作为双端队列的输入序列,则既不能由输入受限的双端队列得到,也不能由输

出受限的双端队列得到的输出序列是( )。【西安电子科技大学 1996 一、5(2分)】

A. 1234

B. 4132

C. 4231

D. 4213

31. 最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。

A. (rear+1) MOD n=front

B. rear=front

C.rear+1=front D. (rear-l) MOD n=front

【南京理工大学 1999 一、16(2分)】

32. 栈和队列的共同点是()。【燕山大学 2001 一、1(2分)】

A. 都是先进先出

B. 都是先进后出

C. 只允许在端点处插入和删除元素

D. 没有共同点

33. 栈的特点是(① ),队列的特点是(② ),栈和队列都是(③ )。若进栈序

列为1,2,3,4 则(④ )不可能是一个出栈序列(不一定全部进栈后再出栈);若进队列的序列为1,2,3,4 则(⑤ )是一个出队列序列。【北方交通大学 1999 一、1(5分)】

①, ②: A. 先进先出 B. 后进先出 C. 进优于出 D. 出优于进

③: A.顺序存储的线性结构 B.链式存储的线性结构

C.限制存取点的线性结构

D.限制存取点的非线性结构

④, ⑤: A. 3,2,1,4 B. 3,2,4,1 C. 4,2,3,1 D. 4,3,2,1 F. 1,2,3,4 G. 1,3,2,4

34. 栈和队都是()【南京理工大学 1997 一、3(2分)】

A.顺序存储的线性结构 B. 链式存储的非线性结构

C. 限制存取点的线性结构

D. 限制存取点的非线性结构

35. 设栈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

【南京理工大学 2000 一、6(1.5分)】

36. 用单链表表示的链式队列的队头在链表的()位置。【清华大学 1998 一、1(2分)】

A.链头 B.链尾 C.链中

37. 依次读入数据元素序列{a,b,c,d,e,f,g}进栈,每进一个元素,机器可要求下一个元素进栈或弹栈,如此进行,则栈空时弹出的元素构成的序列是以下哪些序列?【哈尔滨工业大学 2000 七(8分)】

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}

二判断题

1. 消除递归不一定需要使用栈,此说法()

【中科院计算所 1998 二、2(2分)】【中国科技大学 1998 二、2(2分)】

2. 栈是实现过程和函数等子程序所必需的结构。()【合肥工业大学 2000 二、2(1分)】

3. 两个栈共用静态存储空间,对头使用也存在空间溢出问题。()【青岛大学 2000 四、2(1分)】

4.两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。()【上海海运学院 1998 一、4(1分)】

5. 即使对不含相同元素的同一输入序列进行两组不同的合法的入栈和出栈组合操作,所得的输出序列也一定相同。()【北京邮电大学 1999 二、4(2分)】

6. 有n个数顺序(依次)进栈,出栈序列有Cn种,Cn=[1/(n+1)]*(2n)!/[(n!)*(n!)]。()

【北京邮电大学 1998 一、3(2分)】

7. 栈与队列是一种特殊操作的线性表。()【青岛大学 2001 四、3 (1分)】

8. 若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列3,2,5,6,4,1. ()

【上海海运学院1995 一、2(1分) 1997 一、3(1分)】

9. 栈和队列都是限制存取点的线性结构。()【中科院软件所 1999 六、(5)(2分)】10.若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列1,5,4,6,2,3。()【上海海运学院 1999 一、3(1分)】

11. 任何一个递归过程都可以转换成非递归过程。()【上海交通大学 1998一、3(1分)】

12. 只有那种使用了局部变量的递归过程在转换成非递归过程时才必须使用栈。()

【上海交通大学 1998 一、4(1分)】

13. 队列是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。()

【上海海运学院 1998 一、3(1分)】

14. 通常使用队列来处理函数或过程的调用。()【南京航空航天大学 1997 一、5(1分)】

15. 队列逻辑上是一个下端和上端既能增加又能减少的线性表。()【上海交通大学 1998

一、2】

16. 循环队列通常用指针来实现队列的头尾相接。()【南京航空航天大学 1996 六、1(1分)】

17. 循环队列也存在空间溢出问题。()【青岛大学 2002 一、2 (1分)】

18. 队列和栈都是运算受限的线性表,只允许在表的两端进行运算。()【长沙铁道学院1997

一、5(1分)】

【北京邮电大学2002

19. 栈和队列都是线性表,只是在插入和删除时受到了一些限制。()

一、3(1分)】

20. 栈和队列的存储方式,既可以是顺序方式,又可以是链式方式。()

【上海海运学院 1996 一、2(1分) 1999 一、2(1分)】

三填空题

1.栈是_______的线性表,其运算遵循_______的原则。【北京科技大学 1997 一、3】2._______是限定仅在表尾进行插入或删除操作的线性表。【燕山大学 1998 一、3 (1分)】

3. 一个栈的输入序列是:1,2,3则不可能的栈输出序列是_______。【中国人民大学2001

一、1(2分)】

4. 设有一个空栈,栈顶指针为1000H(十六进制),现有输入序列为1,2,3,4,5,经过PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH之后,输出序列是_______,而栈顶指针值是_______H。设栈为顺序栈,每个元素占4个字节。【西安电子科技大学 1998 二、1(4分)】

5. 当两个栈共享一存储区时,栈利用一维数组stack(1,n)表示,两栈顶指针为top[1]与top[2],则当栈1空时,top[1]为_______,栈2空时,top[2]为_______,栈满时为_______。

【南京理工大学 1997 三、1(3分)】

6.两个栈共享空间时栈满的条件_______。【中山大学 1998 一、3(1分)】

7.在作进栈运算时应先判别栈是否_(1)_;在作退栈运算时应先判别栈是否_(2)_;当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为_(3)_。

为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的空间时,应将两栈的_(4)_分别设在内存空间的两端,这样只有当_(5)_时才产生溢出。【山东工业大学 1994 一、1(5分)】

8. 多个栈共存时,最好用_______作为存储结构。【南京理工大学 2001 二、7(2分)】9.用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为_______。【西南交通大学 2000 一、5】

10. 顺序栈用data[1..n]存储数据,栈顶指针是top,则值为x的元素入栈的操作是_______。

【合肥工业大学 2001 三、2 (2分)】

11.表达式23+((12*3-2)/4+34*5/7)+108/9的后缀表达式是_______。【中山大学 1998 一、4(1分)】

12. 循环队列的引入,目的是为了克服_______。【厦门大学 2001 一、1 (14/8分)】13.用下标0开始的N元数组实现循环队列时,为实现下标变量M加1后在数组有效下标范围

内循环,可采用的表达式是:M:=_______(填PASCAL语言,C语言的考生不填); M= _______(填C语言,PASCAL语言的考生不填)。【西南交通大学 2000 一、7】

14.________又称作先进先出表。【重庆大学 2000 一、7】

15. 队列的特点是_______。【北京理工大学 2000 二、2(2分)】

16.队列是限制插入只能在表的一端,而删除在表的另一端进行的线性表,其特点是_______。

【北方交通大学 2001 二、5】

17. 已知链队列的头尾指针分别是f和r,则将值x入队的操作序列是_______。

【合肥工业大学 2000 三、3(2分)】

【北京邮电大学2001 二、18.区分循环队列的满与空,只有两种方法,它们是______和______。

2(4分)】

19.设循环队列用数组A[1..M]表示,队首、队尾指针分别是FRONT和TAIL,判定队满的条件为_______。

【山东工业大学 1995 一、1(1分)】

20. 设循环队列存放在向量sq.data[0:M]中,则队头指针sq.front在循环意义下的出队操作可表示为_______,若用牺牲一个单元的办法来区分队满和队空(设队尾指针sq.rear),则队满的条件为_______。

【长沙铁道学院 1997 二、4 (4分)】

21.表达式求值是_______应用的一个典型例子。【重庆大学 2000 一、10】

22.循环队列用数组A[0..m-1]存放其元素值,已知其头尾指针分别是front和rear ,则当前队列的元素个数是_______。【厦门大学 2000 六、1(16%/3分)】

23.设Q[0..N-1]为循环队列,其头、尾指针分别为P和R,则队Q中当前所含元素个数为_______。

【北京科技大学 1997 一、4】

24.完善下面算法。【中山大学 1998 四、2(6分)】

后缀表达式求值,表达式13/25+61的后缀表达式格式为: 13, 25/61, +

FUNC compute(a):real; 后缀表达式存储在数组a[1..m]中。

BEGIN

setnull(s);i:=1;ch:= (1)______;

WHILE ch<>’@’ DO

BEGIN

CASE ch OF

‘0’..‘9’: x:=0;

WHILE ch<>’,’DO

BEGIN

x:=x*10+ord(ch)-ord(‘0’);

i:=i+1;ch:= (2)_______;

END

‘+’: x:=pop(s)+pop(s);

‘-‘: x:=pop(s);x:=pop(s)-x;

‘*’: x:=pop(s)*pop(s);

‘/’: x:=pop(s);x:=pop(s)/x;

ENDCASE

push(s,x);i:=i+1;ch:=a[i];

END;

comput:= (3)_______;

END;

25. 算术表达式求值的流程,其中OPTR为算术符栈,OPND为操作数栈,precede(oper1,oper2)是比较运算符优先级别的函数,operate(opnd1,oper,opnd2)为两操作数的运算结果函数。(#表示运算起始和终止符号)【西北工业大学 1999 六、2 (7分)】 FUNCTION exp_reduced:operandtype;

INITSTACK(OPTR);PUSH(OPTR"#");INITSTACK(OPND);read(w);

WHILE NOT((w='#’) AND (GETTOP(OPTR)='#')) DO

IF NOT w in op THEN PUSH(OPND,w);

ELSE CASE precede(GETTOP(OPTR),w)OF

'<':[(1)_______; read(w);]

'=':[(2)_______; read(w);];

'>':[theta:=POP(OPTR);b:=POP(OPND);a:=POP(OPND);(3)_______;] ENDC;

RETURN(GETTOP(OPND));

ENDF;

26.根据需要,用适当的语句填入下面算法的_______中:

问题:设有n件物品,重量分别为w

1,w

2

,w

3

,…,w

n

和一个能装载总重量为T的背包。能

否从n件物品中选择若干件恰好使它们的重量之和等于T。若能,则背包问题有解,否则无解。解此问题的算法如下:

FUNCTION kanp_stack(VAR stack,w:ARRAY[1..n] OF real; VAR top:integer; T:real):boolean;

{w[1:n] 存放n件物品的重量,依次从中取出物品放入背包中,检查背包重量,若不超过T,则装入,否则弃之,取下一个物品试之。若有解则返回函数值true,否则返回false} BEGIN

top:=0; i:=1; { i指示待选物品}

WHILE (1)_______ AND(2)_______DO

[IF (3)______ OR (4)_______ AND (i

THEN [top := (5)_______ ;stack[top] :=i;{第i件物品装入背包}

T:=T-w[i]];

IF T=0 THEN RETURN ((6)_______) {背包问题有解}

ELSE [IF (i=n ) AND (top>0)

THEN [i:=(7)_______;{取出栈顶物品}

top:= (8)_______ ;T:= (9)_______ ]; {恢复T值} i:=i+1 {准备挑选下一件物品}

];

];

RETURN((10)_______) {背包无解}

END;

【北京邮电大学 1996 四(10分)】

四应用题

1. 名词解释:栈。【燕山大学 1999 一、1(2分)】【吉林工业大学 1999 一、3(2分)】

2. 名词解释:队列【大连海事大学 1996 一、6 ( 1分 )】

3. 什么是循环队列?【哈尔滨工业大学 2001 三、2(3分)】【河南大学 1998 一、4(3分)】

4. 假设以S和X分别表示入栈和出栈操作,则对初态和终态均为空的栈操作可由S和X组成的序列表示(如SXSX)。

(1)试指出判别给定序列是否合法的一般规则。

(2)两个不同合法序列(对同一输入序列)能否得到相同的输出元素序列?如能得到,请举列说明。

【东南大学 1992 二(10分)】

5. 有5 个元素,其入栈次序为:A,B,C,D,E,在各种可能的出栈次序中,以元素C,D 最先出栈(即C第一个且D第二个出栈)的次序有哪几个?【西南交通大学 2000 二、1】

6. 如果输入序列为1 2 3 4 5 6,试问能否通过栈结构得到以下两个序列:4 3 5 6 1 2和1 3 5 4 2 6;请说明为什么不能或如何才能得到。【武汉交通科技大学 1996 二、3 (3分)】

7. 若元素的进栈序列为:A、B、C、D、E,运用栈操作,能否得到出栈序列B、C、A、E、D 和D、B、A、C、E?为什么?【北京科技大学 1998 一、2】

8. 设输入序列为a,b,c,d,试写出借助一个栈可得到的两个输出序列和两个不能得到的输出序列。

【北京科技大学 2001 一、4(2分)】

9. 设输入序列为2,3,4,5,6,利用一个栈能得到序列2,5,3,4,6吗?栈可以用单链表实现吗?

【山东师范大学 1996 五、4(2分)】

10. 试证明:若借助栈由输入序列1,2,…,n得到输出序列为P

1,P

2

,…,P

n

(它是输入序列的

一个排列),则在输出序列中不可能出现这样的情形:存在着i

j

k

i

。【上海交通

大学 1998 二(15分)】

11. 设一数列的输入顺序为123456,若采用堆栈结构,并以A和D分别表示入栈和出栈操作,试问通过入出栈操作的合法序列。

(1)能否得到输出顺序为325641的序列。(5分)

(2)能否得到输出顺序为154623的序列。(5分)【北方交通大学 1995 一(10分)】12.(1)什么是递归程序?

(2)递归程序的优、缺点是什么?

(3)递归程序在执行时,应借助于什么来完成?

(4)递归程序的入口语句、出口语句一般用什么语句实现?【大连海事大学 1996二、4(4分)】

13. 设有下列递归算法:

FUNCTION vol(n:integer):integer;

VAR x :integer:

BEGIN IF n=0 THEN vol:=0

ELSE BEGIN read(x);vol:=vol(n-1)+x;END;

END;

如该函数被调用时,参数n值为4,读入的x值依次为5,3,4,2,函数调用结束时返回值vol 为多少?用图示描述函数执行过程中,递归工作栈的变化过程。【北京工业大学 1998 四 (10分)】

14. 当过程P递归调用自身时,过程P内部定义的局部变量在P的2次调用期间是否占用同一数据区?为什么?【山东师范大学 1999 一、4 (4分)】

15. 试推导出当总盘数为n的Hanoi塔的移动次数。【北京邮电大学 2001 四、3 (5分)】

16. 对下面过程写出调用P(3)的运行结果。

PROCEDURE p(w:integer);

BEGIN

IF w>0 THEN

BEGIN

p(w-1);

writeln(w);{输出W}

p(w-1)

END;

END;

【西北大学 2001 三、7】

17. 用一个数组S(设大小为MAX)作为两个堆栈的共享空间。请说明共享方法,栈满/栈空

的判断条件,并用C或PASCAL设计公用的入栈操作push(i,x),其中i为0或1,用于表

示栈号,x为入栈值。

【浙江大学 1998 五、2 (7分)】

18. 简述下列程序段的功能。

PROC algo(VAR S : stack; k:integer);

VAR T: stack; temp: integer;

WHILE NOT empty(S) DO

[temp:=POP(S); IF temp<>k THEN PUSH(T,temp)];

WHILE NOT empty(T) DO [temp:=POP(T);PUSH(S,temp)];

【山东科技大学 2002 一、1(4分)】

19. 用栈实现将中缀表达式8-(3+5)*(5-6/2)转换成后缀表达式,画出栈的变化过程图。

【南京航空航天大学 2001 五(10分)】

20. 在表达式中,有的运算符要求从右到左计算,如A**B**C的计算次序应为(A**(B**C)),这在由中缀生成后缀的算法中是怎样实现的?(以**为例说明)【东南大学1993一、2(6分) 1997一、1(8分)】

21. 有递归算法如下:

FUNCTION sum (n:integer):intger;

BEGIN

IF n=0 THEN sum:=0

ELSE BEGIN read(x);sum:=sum(n-1)+x END;

END;

设初值n=4,读入 x=4,9,6,2

问:(1) 若x为局部变量时;该函数递归结束后返回调用程序的sum=? 并画出在递归过

程中栈状态的变化过程;

(2) 若x为全程变量递归结束时返回调用程序的sum=?【北京邮电大学 1997 一(10分)】

22. 画出对算术表达式A-B*C/D-E↑F求值时操作数栈和运算符栈的变化过程。

【东南大学2000一、3(6分)】

23. 计算算术表达式的值时,可用两个栈作辅助工具。对于给出的一个表达式,从左向右扫

描它的字符,并将操作数放入栈S1中,运算符放入栈S2中,但每次扫描到运算符时,要把

它同S2的栈顶运算符进行优先级比较,当扫描到的运算符的优先级不高于栈顶运算符的优

先级时,取出栈S1的栈顶和次栈顶的两个元素,以及栈S2的栈顶运算符进行运算将结果放

入栈S1中(得到的结果依次用T1、T2等表示)。为方便比较,假设栈S2的初始栈顶为?(?

运算符的优先级低于加、减、乘、除中任何一种运算)。现假设要计算表达式: A-B*C/D+E/F。写出栈S1和S2的变化过程。【山东科技大学 2001 一、4 (7分)】

24. 有字符串次序为3*-y-a/y^2,利用栈,给出将次序改为3y-*ay2^/-的操作步骤。(可用X 代表扫描该字符串过程中顺序取一个字符进栈的操作,用S代表从栈中取出一个字符加入到新字符串尾的出栈操作。例如,ABC变为BCA的操作步骤为XXSXSS)【东北大学 2001 一、4 ( 4分)】

25. 内存中一片连续空间(不妨假设地址从1到m)提供给两个栈S1和S2使用,怎样分配这部分存储空间,使得对任一个栈,仅当这部分空间全满时才发生上溢。【东北大学 2000一、1 (3分)】

26. 将两个栈存入数组V[1..m]应如何安排最好?这时栈空、栈满的条件是什么?【东南大学1998一、5】

27. 在一个算法中需要建立多个堆栈时可以选用下列三种方案之一,试问:这三种方案之间相比较各有什么优缺点?

(1)分别用多个顺序存储空间建立多个独立的堆栈;

(2)多个堆栈共享一个顺序存储空间;

(3)分别建立多个独立的链接堆栈。【北京航空航天大学 1998 一、6(4分)】

28.在某程序中,有两个栈共享一个一维数组空间SPACE[N]、SPACE[0]、SPACE[N-1] 分别是两个栈的栈底。

(1)对栈1、栈2,试分别写出(元素x)入栈的主要语句和出栈的主要语句。

(2)对栈1、栈2,试分别写出栈满、栈空的条件。【北京理工大学 1999 二、2(8分)】29. 简述顺序存储队列的假溢出的避免方法及队列满和空的条件。【山东大学 2000 一、2 (4分)】

30. 举例说明顺序队的“假溢出”现象,并给出解决方案。【福州大学 1998 三、5 (6分)】

31. 怎样判定循环队列的空和满?【燕山大学 1999 二、3(4分)】

32. 简要叙述循环队列的数据结构,并写出其初始状态、队列空、队列满时的队首指针与队尾指针的值。

【南京航空航天大学 1995 七(5分)】

33. 利用两个栈sl,s2模拟一个队列时,如何用栈的运算实现队列的插入,删除以及判队空运算。请简述这些运算的算法思想。【北京邮电大学 1992 一、1】【东南大学 1999 一、1 (7分)】

34.一个循环队列的数据结构描述如下:

TYPE sequeuetp=RECORD

elem:ARRAY[1..MAXSIZE] OF elemtp;

front,rear:0..MAXSIZE;

END;

给出循环队列的队空和队满的判断条件,并且分析一下该条件对队列实际存储空间大小的影响,如果为了不损失存储空间,你如何改进循环队列的队空和队满的判断条件?【西北工业大学 1999 三 (8分)】

35. 如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,而改置计数器count用以记录队列中结点的个数。

(1)编写实现队列的三个基本运算:判空、入队、出队(3分)

(2)队列中能容纳元素的最多个数是多少?(1分)【东北大学 2002 一、1】

36. 给出循环队列中元素个数的计算式(设队最大长度为N,队首指针FRONT,队尾指针REAR)

【西北大学 2000 二、7 (5分)】

37. 顺序队列一般应该组织成为环状队列的形式,而且一般队列头或尾其中之一应该特殊处理。例如,队列为listarray[0..n-1],队列头指针为 front,队列尾指针为 rear,则listarray [rear]表示下一个可以插入队列的位置。请解释其原因。【北京大学 1999 一、3 (20/3分)】

38. 设一个双端队列,元素进入该队列的次序为a,b,c,d。求既不能由输入受限的双端队列得到,又不能由输出受限的双端队列得到的输出序列。【中山大学 1999 一、4 (3分)】39. 若以1、2、3、4作为双端队列的输入序列,试分别求出以下条件的输出序列:

(1)能由输入受限的双端队列得到,但不能由输出受限的双端队列得到的输出序列;

(2)能由输出受限的双端队列得到,但不能由输入受限的双端队列得到的输出序列;

(3)既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列。

【山东科技大学 2001 一、3 (6分)】

40. 假设以数组sq[0..7]存放循环队列元素,变量f指向队头元素的前一位置,变量r指向队尾元素,如用A和D分别表示入队和出队操作,请给出:

(1)队空的初始条件;

(2)执行操作序列A3D1A5D2A1D2A4时的状态,并作必要的说明。【北方交通大学 1993 四(12分)】

41、设输入元素为1、2、3、P和A,输入次序为123PA,如图(编者略)。元素经过栈后达输出序列,当所有元素均到达输出序列后,有哪些序列可以作为高级语言的变量名。【中山大学 1997】

五算法设计题

1. 设有两个栈S

1,S

2

都采用顺序栈方式,并且共享一个存储区[O..maxsize-1],为了尽量利

用空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。试设计S

1,S

2

有关入栈

和出栈的操作算法。

【哈尔滨工业大学 2001 七(12分)】

2. 设从键盘输入一整数的序列:a

1, a

2

, a

3

,…,a

n

,试编写算法实现:用栈结构存储输入的

整数,当a

i ≠-1时,将a

i

进栈;当a

i

=-1时,输出栈顶整数并出栈。算法应对异常情况(入

栈满等)给出相应的信息。

【南京航空航天大学 1998 六(10分)】

3. 设表达式以字符形式已存入数组E[n]中,‘#’为表达式的结束符,试写出判断表达式中括号(‘(’和‘)’)是否配对的C语言描述算法:EXYX(E); (注:算法中可调用栈操作的基本算法。)

【北京科技大学 2001 九、1 (10分)】

4. 从键盘上输入一个逆波兰表达式,用伪码写出其求值程序。规定:逆波兰表达式的长度不超过一行,以$符作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2*$

【山东师范大学 1999 七(10分)】

5. 假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。(1)下面所示的序列中哪些是合法的?

A. IOIIOIOO

B. IOOIOIIO

C. IIIOIOIO

D. IIIOOIOO

(2)通过对(1)的分析,写出一个算法,判定所给的操作序列是否合法。若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)。【武汉大学 2000 五、2】

6.设计一个算法,判断一个算术表达式中的括号是否配对。算术表达式保存在带头结点的单循环链表中,每个结点有两个域:ch和link,其中ch域为字符类型。【南京邮电大学 2000五】

7. 请利用两个栈S1和S2来模拟一个队列。已知栈的三个运算定义如下:PUSH(ST,x):元素x入ST栈;POP(ST,x):ST栈顶元素出栈,赋给变量x;Sempty(ST):判ST栈是否为空。那么如何利用栈的运算来实现该队列的三个运算:enqueue:插入一个元素入队列; dequeue:删除一个元素出队列;queue_empty:判队列为空。(请写明算法的思想及必要的注释)

【河海大学1998 三【西安电子科技大学2001软件五(10分)】

【上海交通大学1999 二(12分)】

(12分)】

类似本题的另外叙述有:

(1)有两个长度相同的栈S1,S2,已知以下入栈、出栈、判栈满和判栈空操作:

PROCEDURE push(Stack:Stacktype;x:Datatype);

FUNCTION Pop(Stack:Stacktype ):Datatype;

FUNCTION Full (Stack:Stacktype):Boolean;

FUNCTION Empty(Stack:Stacktype)Boolean;

现用此二栈构成一个队列,试写出下面入队列、出队列操作算法:

PROCEDURE EnQueue(x:Datatype);

FUNCTION DeQueue: Datatype;【北京邮电大学 2000 六(10分)】

8. 设结点结构为(data,link),试用一个全局指针p和某种链接结构实现一个队列,画出示意图,并给出入队addq和出队deleteq过程,要求它们的时间复杂性都是O(l)(不计new和dispose时间)

【东南大学 1996 二(10分)】

9. 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针,如图所示(编者略),请写出相应的入队列和出队列算法。【西安电子科技大学 1999计应用六(10分)】

10. 如果允许在循环队列的两端都可以进行插入和删除操作。要求:

(1)写出循环队列的类型定义;

(2)写出“从队尾删除”和“从队头插入”的算法。【北方交通大学 1994 三(12分)】11. 在一个循环链队中只有尾指针(记为rear,结点结构为数据域data,指针域next),请给出这种队列的入队和出队操作的实现过程。【山东科技大学 2002 一、2 (6分)】12. 双端队列(duque)是一个可以在任一端进行插入和删除的线性表。现采用一个一维数组作为双端队列的数据存储结构,使用类PASCAL语言描述如下:

CONST maxsize=32; {数组中可容纳的元素个数}

TYPE duque=RECORD

elem: ARRAY[0..MAXSIZE-1] OF datatype; {环形队列的存放数组}

end1,end2:0..MAXSIZE; {环形数组的两端}

END;

试编写两个算法add(Qu:duque;x:datatype;tag:0..1)和delete(Qu:duque; var x:datatype; tag:0..1)用以在此双端队列的任一端进行插入和删除。当tag=0时在左端endl 端操作,当tag=1时在右端end2端操作。【清华大学 1998 二(10分)】

13. 一个双端队列deque是限定在两端end1,end2都可进行插入和删除的线性表。队空条件是end1=end2。若用顺序方式来组织双端队列,试根据下列要求,定义双端队列的结构,并给出在指定端i(i=1,2)的插入enq和删除deq操作的实现。

(1)当队满时,最多只能有一个元素空间可以是空的。

(2)在做两端的插入和删除时,队列中其它元素一律不动。【清华大学 1999 六(12分)】14. 已知Q是一个非空队列,S是一个空栈。仅用队列和栈的ADT函数和少量工作变量,使用Pascal或C语言编写一个算法,将队列Q中的所有元素逆置。栈的ADT函数有:makeEmpty(s:stack); 置空栈

push(s:stack;value:datatype); 新元素value进栈

pop(s:stack):datatype; 出栈,返回栈顶值

isEmpty(s:stack):Boolean; 判栈空否

队列的 ADT函数有:

enqueue(q:queue:value:datatype); 元素value进队

deQueue(q:queue):datatype; 出队列,返回队头值

isEmpty(q:queue):boolean; 判队列空否【清华大学 2000 六(12分)】15. 将n个队列顺序映射到数组v[l..m]中,每一队列在v中表示为一循环队列。试画出其示意图并写出对应这种表示的addq和deleteq过程。【东南大学 1993 二(20分)】

16. 设整数序列a

1,a

2

,…,a

n

,给出求解最大值的递归程序。【南京航空航天大学 2000 六】

17.线性表中元素存放在向量A(1,…,n)中,元素是整型数。试写出递归算法求出A中的最大和最小元素。【北京邮电大学 1994 八(10分)】

18. 已知求两个正整数m与n的最大公因子的过程用自然语言可以表述为反复执行如下动作:第一步:若n等于零,则返回m;第二步:若m小于n,则m与n相互交换;否则,保存m,然后将n送m,将保存的m除以n的余数送n。

(1)将上述过程用递归函数表达出来(设求x除以y的余数可以用x MOD y 形式表示)。

(2)写出求解该递归函数的非递归算法。【北京航空航天大学 2001 五(15分)】

19. 写出和下列递归过程等价的非递归过程。

PROCEDURE test(VAR sum:integer);

VAR a:integer,

BEGIN

read(a);

IF a=0 THEN sum:=1

ELSE BEGIN test(sum); sum:=sum*a;END;

write(sum);

END; 【清华大学 1996 二】

20. 试将下列递归过程改写为非递归过程。

void test(int &sum)

{ int x;

scanf(x);

if(x=0) sum=0 else {test(sum); sum+=x;}

printf(sum);

} 【北京轻工业学院 2000 三(15分)】

21. 已知Ackermann函数定义如下:

(1)写出Ack(2,1)的计算过程。

(2)写出计算Ack(m,n)的非递归算法。【北京航空航天大学 1999 六(15分)】22.设计算法以求解从集合{1..n}中选取k(k<=n)个元素的所有组合。例如,从集合{1..4}

中选取2个元素的所有组合的输出结果为:1 2,1 3,1 4,2 3, 2 4,3 4。

【合肥工业大学 2000 五、5(8分)】

完整版数据结构习题集第3章栈和队列

第3章栈和队列 一、选择题 1.栈结构通常采用的两种存储结构是(A )。 A、顺序存储结构和链表存储结构 B、散列和索引方式 C、链表存储结构和数组 D、线性链表结构和非线性存储结构 2.设栈ST 用顺序存储结构表示,则栈ST 为空的条件是( B ) A、ST.top-ST.base<>0 B、ST.top-ST.base==0 C、ST.top-ST.base<>n D、ST.top-ST.base==n 3.向一个栈顶指针为HS 的链栈中插入一个s 结点时,则执行( C ) 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; 4.从一个栈顶指针为HS 的链栈中删除一个结点,用x 保存被删除结点的值,则执行( C) A 、x=HS;HS=HS->next; B 、HS=HS->next;x=HS->data; C 、x=HS->data;HS=HS->next; D 、s->next=Hs;Hs=HS->next; 5.表达式a*(b+c)-d 的后缀表达式为( B ) A、abcdd+- B、abc+*d- C、abc*+d- D、-+*abcd 6.中缀表达式A-(B+C/D)*E 的后缀形式是( D ) A、AB-C+D/E* B、ABC+D/E* C、ABCD/E*+- D、ABCD/+E*- 7.一个队列的入列序列是1,2,3,4,则队列的输出序列是( B ) A、4,3,2,1 B、1,2,3,4 C、1,4,3,2 D、3,2,4,1 8.循环队列SQ 采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front 和rear,则判定此循环队列为空的条件是() A、Q.rear-Q.front==n B、Q.rear-Q.front-1==n C、Q.front==Q.rear D、Q.front==Q.rear+1 9.循环队列SQ 采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front 和rear,则判定此循环队列为满的条件是() A、Q.front==Q.rear B、Q.front!=Q.rear C、Q.front==(Q.rear+1)%n D、Q.front!=(Q.rear+1)%n 10.若在一个大小为6 的数组上实现循环队列,且当前rear 和front 的值分别为0 和3,当从 队列中删除一个元素,再加入两个元素后,rear 和front 的值分别为() A、1,5 B、2, 4 C、4,2 D、5,1 11.用单链表表示的链式队列的队头在链表的()位置 A、链头 B、链尾 C、链中 12.判定一个链队列Q(最多元素为n 个)为空的条件是() A、Q.front==Q.rear B、Q.front!=Q.rear C、Q.front==(Q.rear+1)%n D、Q.front!=(Q.rear+1)%n 13.在链队列Q 中,插入s 所指结点需顺序执行的指令是() A 、Q.front->next=s;f=s; B 、Q.rear->next=s;Q.rear=s;

实验三 栈和队列的应用

实验三栈和队列的应用 1、实验目的 (1)熟练掌握栈和队列的结构以及这两种数据结构的特点、栈与队列的基本操作。 (2)能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空的判断条件及描述方法; (3)熟练掌握链队列和循环队列的基本运算,并特别注意队列满和队列空的判断条件和描述方法; (4)掌握栈和队列的应用; 2、实验内容 1)栈和队列基本操作实现 (1)栈的基本操作:采用顺序存储或链式存储结构(数据类型自定义),实现初始化栈、判栈是否为空、入栈、出栈、读取栈顶元素等基本操作,栈的存储结构自定义。 (2)队列的基本操作:实现循环队列或链队列的初始化、入队列、出队列、求队列中元素个数、判队列空等操作,队列的存储结构自定义。 2)栈和队列的应用 (1)利用栈的基本操作将一个十进制的正整数转换成二进制数据,并将其转换结果输出。 提示:利用栈的基本操作实现将任意一个十进制整数转化为R进制整数算法为: 十进制整数X和R作为形参 初始化栈 只要X不为0重复做下列动作 将x%R入栈 X=X/R 只要栈不为空重复做下列动作 栈顶出栈 输出栈顶元素 (2) 利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Right”,否则输出“Wrong”。

(3) 假设循环队列中只设rear(队尾)和quelen(元素个数据)来分别表示队尾元素的位置和队中元素的个数,写出相应的入队和出队程序。 (4)选作题:编写程序实现对一个输入表达式的括号配对。 3、实验步骤 (1)理解栈的基本工作原理; (2)仔细分析实验内容,给出其算法和流程图; (3)用C语言实现该算法; (4)给出测试数据,并分析其结果; (5)在实验报告册上写出实验过程。 4、实验帮助 算法为: 1) 定义栈的顺序存取结构 2) 分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等) 3) 定义一个函数用来实现上面问题: 十进制整数X和R作为形参 初始化栈 只要X不为0重复做下列动作 将X % R入栈 X=X/R 只要栈不为空重复做下列动作 栈顶出栈 输出栈顶元素 5、算法描述 (1))初始化栈S (创建一个空栈S) void initstack(sqstack *S) { S->base=(ElemType *) malloc(INITSIZE*sizeof(ElemType)); if(!S->base) exit (-1); S->top=0; /*空栈标志*/ S->stacksize = INITSIZE; } (2) 获取栈顶元素 int gettop(sqstack S,ElemType *e) //顺序钱 { if ( S.top==0 ) /* 栈空 */

数据结构_实验三_栈和队列及其应用

实验编号:3四川师大《数据结构》实验报告2016年10月29日 实验三栈和队列及其应用_ 一.实验目的及要求 (1)掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们; (2)本实验训练的要点是“栈”的观点及其典型用法; (3)掌握问题求解的状态表示及其递归算法,以及由递归程序到非递归程序的转化方法。 二.实验内容 (1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等); (2)应用栈的基本操作,实现数制转换(任意进制); (3)编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列); (4)利用栈实现任一个表达式中的语法检查(括号的匹配)。 (5)利用栈实现表达式的求值。 注:(1)~(3)必做,(4)~(5)选做。 三.主要仪器设备及软件 (1)PC机 (2)Dev C++ ,Visual C++, VS2010等 四.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等); A.顺序储存: 代码部分: 栈" << endl; cout << " 2.出栈" << endl; cout << " 3.判栈空" << endl; cout << " 4.返回栈顶部数据" << endl; cout << " 5.栈长" << endl; cout << " 0.退出系统" << endl;

cout << "你的选择是:" ; } 链式储存: 代码部分: 栈"<>select; switch (select){ case 0:break; case 1: cout<<"push data:"; cin>>e; if(push(L,e)){

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

数据结构:栈和队列

单选题: 1.在一个具有n个单元的顺序栈中,假定以地址低端作为栈底,以top作为栈顶指针,则当做退栈处 理时,top变化为_____。 A. top不变 B. top=-n C. top=top-1 D.top=top+1 2.向顺序栈中压入元素时,是_____。 A.先移动栈顶指针,后存入元素 B.先存入元素,后移动栈顶指针 3.在一个顺序存储的循环队列中,队首指针指向队首元素的_____。 A.前一个位置 B.后一个位置 C.队首元素位置 4.若进栈序列为1,2,3,4,进栈过程中可以出栈,则_____不可能是一个出栈序列。 A.3,4,2,1 B.2,4,3,1 C.1,4,3,2 D.3,2,1,4 5.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队首指针和队尾指针,则判断队 空的条件是_____。 A.front= =rear+1 B.front+1= =rear C.front= =rear D.front= =0 6.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队首指针和队尾指针,则判断队 满的条件是_____。 A.\rear % n= =front B.(rear-1) % n= =front C.(rear-1) % n= =rear D.(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.edcba B.decba C.dceab D.abcde 12.若己知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi(1top!=-1 B.st->top==-1 C.st->top!=MaxSize-1 D.st->top==MaxSize-1 18.判定一个顺序栈st(最多元素为MaxSize)为栈满的条件是_______。 A.st->top!=-1 B.st->top==-1 C.st->top!=MaxSize-1 D.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;

数据结构堆栈与队列实验报告

实验二堆栈和队列 实验目的: 1.熟悉栈这种特殊线性结构的特性; 2.熟练并掌握栈在顺序存储结构和链表存储结构下的基本运算; 3.熟悉队列这种特殊线性结构的特性; 3.熟练掌握队列在链表存储结构下的基本运算。 实验原理: 堆栈顺序存储结构下的基本算法; 堆栈链式存储结构下的基本算法; 队列顺序存储结构下的基本算法; 队列链式存储结构下的基本算法; 实验内容: 第一题链式堆栈设计。要求 (1)用链式堆栈设计实现堆栈,堆栈的操作集合要求包括:初始化StackInitiate(S),非空否StackNotEmpty(S),入栈StackiPush(S,x),出栈StackPop(S,d),取栈顶数据元素StackTop(S,d); (2)设计一个主函数对链式堆栈进行测试。测试方法为:依次把数据元素1,2,3,4,5入栈,然后出栈并在屏幕上显示出栈的数据元素; (3)定义数据元素的数据类型为如下形式的结构体, Typedef struct { char taskName[10]; int taskNo; }DataType; 首先设计一个包含5个数据元素的测试数据,然后设计一个主函数对链式堆栈进行测试,测试方法为:依次吧5个数据元素入栈,然后出栈并在屏幕上显示出栈的数据元素。 第二题对顺序循环队列,常规的设计方法是使用対尾指针和对头指针,对尾指针用于指示当前的対尾位置下标,对头指针用于指示当前的対头位置下标。现要求: (1)设计一个使用对头指针和计数器的顺序循环队列抽象数据类型,其中操作包括:初始化,入队列,出队列,取对头元素和判断队列是否为空; (2)编写主函数进行测试。 程序代码: 第一题: (1)源程序"LinStack.h"如下: #define NULL 0 typedef struct snode { DataType data; struct snode *next; } LSNode; /*(1)初始化StackInitiate(LSNode ** head) */ void StackInitiate(LSNode ** head) /*初始化带头结点链式堆栈*/

实验二_栈、队列地实现与应用

实验二栈、队列的实现及应用 实验课程名:数据结构与算法 专业班级:学号::

/*构造空顺序栈*/ int InitStack(SqStack *S) //InitStack() sub-function { S->base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if (!S->base) { printf("分配空间失败!\n"); return (ERROR); } S->top = S->base; S->stacksize = STACK_INIT_SIZE; printf("栈初始化成功!\n"); return (OK); } //InitStack() end /*取顺序栈顶元素*/ int GetTop(SqStack *S, SElemType *e) //GetTop() sub-function { if (S->top == S->base) { printf("栈为空!\n"); //if empty SqStack return (ERROR); } *e = *(S->top - 1); return (OK); } //GetTop() end /*将元素压入顺序栈*/ int Push(SqStack *S) //Push() sub-function { SElemType e; if (S->top - S->base>S->stacksize) { S->base = (SElemType *)realloc(S->base, (S->stacksize + STACKINCREMENT*sizeof(SElemType))); if (!S->base) { printf("存储空间分配失败!\n"); return (ERROR); } S->top = S->base + S->stacksize; S->stacksize += STACKINCREMENT; } fflush(stdin);//清除输入缓冲区,否则原来的输入会默认送给变量x

数据结构第三章栈和队列3习题

第三章栈和队列试题 一、单项选择题 1.栈的插入和删除操作在()进行。 A. 栈顶 B. 栈底 C. 任意位置 D. 指定位置 2.当利用大小为n的数组顺序存储一个栈时,假定用top==n表示栈空,则向这个栈插入一个元素时, 首先应执行()语句修改top指针。 A. top++; B. top--; C. top = 0; D. top; 3.若让元素1,2,3依次进栈,则出栈次序不可能出现()种情况。 A. 3, 2, 1 B. 2, 1, 3 C. 3, 1, 2 D. 1, 3, 2 4.在一个顺序存储的循环队列中,队头指针指向队头元素的()位置。 A. 前一个 B. 后一个 C. 当前 D. 后面 5.当利用大小为n的数组顺序存储一个队列时,该队列的最大长度为()。 A. n-2 B. n-1 C. n D. n+1 6.从一个顺序存储的循环队列中删除一个元素时,需要()。 A. 队头指针加一 B. 队头指针减一 C. 取出队头指针所指的元素 D. 取出队尾指针所指的元素 7.假定一个顺序存储的循环队列的队头和队尾指针分别为front和rear,则判断队空的条件为()。 A. front+1 == rear B. rear+1 == front C. front == 0 D. front == rear 8.假定一个链式队列的队头和队尾指针分别为front和rear,则判断队空的条件为()。 A. front == rear B. front != NULL C. rear != NULL D. front == NULL 9.设链式栈中结点的结构为(data, link),且top是指向栈顶的指针。若想在链式栈的栈顶插入一 个由指针s所指的结点,则应执行操作()。 A. top->link = s; B.s->link = top->link; top->link = s; C. s->link = top; top = s; D. s->link = top; top = top->link; 10.设链式栈中结点的结构为(data, link),且top是指向栈顶的指针。若想摘除链式栈的栈顶结点, 并将被摘除结点的值保存到x中,则应执行操作()。 A. x = top->data; top = top->link; B. top = top->link; x = top->data; C. x = top; top = top->link; D. x = top->data; 11.设循环队列的结构是 #define MaxSize 100 typedef int ElemType;

数据结构练习 第三章 栈和队列

数据结构练习第三章栈和队列 一、选择题 1.栈和队列的共同特点是( )。 A.只允许在端点处插入和删除元素 B.都是先进后出 C.都是先进先出 D.没有共同点 2.向顺序栈中压入新元素时,应当()。 A.先移动栈顶指针,再存入元素 B.先存入元素,再移动栈顶指针C.先后次序无关紧要 D.同时进行 3.允许对队列进行的操作有( )。 A. 对队列中的元素排序 B. 取出最近进队的元素 C. 在队头元素之前插入元素 D. 删除队头元素 4.用链接方式存储的队列,在进行插入运算时( ). A. 仅修改头指针 B. 头、尾指针都要修改 C. 仅修改尾指针 D.头、尾指针可能都要修改 5.设用链表作为栈的存储结构则退栈操作()。 A. 必须判别栈是否为满 B. 必须判别栈是否为空 C. 判别栈元素的类型 D.对栈不作任何判别 6.设指针变量front表示链式队列的队头指针,指针变量rear表示链式队列的队尾指针,指针变量s指向将要入队列的结点X,则入队列的操作序列为()。 A.front->next=s;front=s; B. s->next=rear;rear=s; C. rear->next=s;rear=s; D. s->next=front;front=s; 7.设指针变量top指向当前链式栈的栈顶,则删除栈顶元素的操作序列为()。 A.top=top+1; B. top=top-1; C. top->next=top; D. top=top->next; 8.队列是一种()的线性表。 A. 先进先出 B. 先进后出 C. 只能插入 D. 只能删除 9.设输入序列1、2、3、…、n经过栈作用后,输出序列中的第一个元素是n,则输出序列中的第i个输出元素是()。 A. n-i B. n-1-i C. n+l -i D.不能确定 10.设输入序列为1、2、3、4、5、6,则通过栈的作用后可以得到的输出序列为()。 A. 5,3,4,6,1,2 B. 3,2,5,6,4,1 C. 3,1,2,5,4,6 D. 1,5,4,6,2,3 11.队列的删除操作是在()进行。 A.队首 B.队尾 C.队前 D.队后 12.当利用大小为N 的数组顺序存储一个栈时,假定用top = = N表示栈空,则退栈时,用()语句修改top指针。 A.top++; B.top=0; C.top--; D.top=N; 13.队列的插入操作是在()进行。

数据结构栈和队列实验报告.doc

南京信息工程大学实验(实习)报告 实验(实习)名称栈和队列日期2017.11.8 得分指导老师崔萌萌 系计算机系专业软件工程年级2016 班次(1) 姓名学号 一、实验目的 1、学习栈的顺序存储和实现,会进行栈的基本操作 2、掌握递归 3、学习队列的顺序存储、链式存储,会进行队列的基本操作 4、掌握循环队列的表示和基本操作 二、实验内容 1、用栈解决以下问题: (1)对于输入的任意一个非负十进制数,显示输出与其等值的八进制数,写出程序。(2)表达式求值,写出程序。 2、用递归写出以下程序: (1)求n!。 (2)汉诺塔程序,并截图显示3、4、5个盘子的移动步骤,写出移动6个盘子的移动次数。

3、编程实现:(1)创建队列,将asdfghjkl依次入队。(2)将队列asdfghjkl依次出队。 4、编程实现创建一个最多6个元素的循环队列、将ABCDEF依次入队,判断循环队列是否队满。 三、实验步骤 1.栈的使用 1.1 用栈实现进制的转换: 代码如下: #include #include using namespace std; int main() { stack s; //栈s; int n,radix; printf("请输入要转换的十进制非负整数: "); scanf("%d",&n); printf("请输入目标进制: "); scanf("%d",&radix);

printf("转换为%d进制: ",radix); while(n) { s.push(n%radix); n /= radix; } while(!s.empty()) { //非空 printf("%d",s.top()); s.pop(); } printf("\n"); return 0; } 运行结果如下: 2.2 求表达式的值 代码如下: #include #include #include #include #define true 1 #define false 0 #define OPSETSIZE 8 typedef int Status;

实验二栈队列的实现及应用

百度文库-让每个人平等地提升自我 实验二栈、队列的实现及应用 实验课程名:数据结构与算法 专业班级:_ 学号:__________ 姓名: _ 实验时间: ____ 实验地点:指导教师:冯珊__________ 一、实验目的 1掌握栈和队列的顺序存储结构和链式存储结构,以便在实际背景下灵活运用。 2、掌握栈和队列的特点,即先进后出与先进先出的原则。 3、掌握栈和队列的基本操作实现方法。 /*顺序栈的存储类型*/ typedef struct

1 2 3 4 5远 兀 1 一 7U- 元 谴 段 囑 :> o 1 2 3 R * 元 元 栈 書 t 出 一 ^ 零 遐 次 :± 谨 虚 1 2 3 ^ 5 I B

D 认戯握结IVl 匚on&ol eAp pli cation!\[>ebu g\Con 5 o-leApp li cation 1 .exe :1 刖人操作谊睪代码(05):2 : h E s 选 的 操 一 兀 一 b 一 丁 一 丁 栈 ? 遐 次 嘆 區 1 2 3 4 5 5 ^ 元 元 栈 S 退 、 灵 岀 祓 S I ■ i 9 I I I i 主 至 ..T' 一 兀 元 栈 £ 1 2 3 4 5 \Z

百度文库 -让每个人平等地提升自我 P入操隹选择代码(0-5>:4 派元素的是 ; 栈 化 出 取 示 艮 i元一一 选 的 操 元 -> 入 中 >c 1- 苴翻(05): 5 栈 化 亍 1 2 元 元 Is 务一(2):完成下列程序,该程序实现栈的链式存储结构,构建链栈(栈中的元素依次为China , Japan, France,India ,Australia ),依次进行进栈和出栈操作,判断栈空和栈满操作,返回栈顶元素操作。 要求生成链栈时,从键盘上读取数据元素。 (1)源代码:#i nclude<> #in clude<> #in clude<> # define OK 1 # define ERROR 0 typedef char DataType; /*链式栈的存储类型*/ typedef struct SNode

数据结构栈和队列习题及答案

习题三栈和队列 一单项选择题 1. 在作进栈运算时,应先判别栈是否(① ),在作退栈运算时应先判别栈是否(② )。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③ )。 ①, ②: A. 空 B. 满 C. 上溢 D. 下溢 ③: A. n-1 B. n C. n+1 D. n/2 2.若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,...,pn,若p1=3,则p2为( )。 A 可能是2 B 一定是2 C 可能是1 D 一定是1 3. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?() A. 5 4 3 6 1 2 B. 4 5 3 1 2 6 C. 3 4 6 5 2 1 D. 2 3 4 1 5 6 4.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4, s6, s5,s1,则栈的容量至少应该是() A.2 B. 3 C. 5 D.6 5. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。 A. |top[2]-top[1]|=0 B. top[1]+1=top[2] C. top[1]+top[2]=m D. top[1]=top[2] 6. 执行完下列语句段后,i值为:() int f(int x) { return ((x>0) ? x* f(x-1):2);} int i ; i =f(f(1)); A.2 B. 4 C. 8 D. 无限递归 7. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂。 A. 3,2,4,1,1;(*^(+*- B. 3,2,8;(*^- C. 3,2,4,2,2;(*^(- D. 3,2,8;(*^(- 8. 用链接方式存储的队列,在进行删除运算时()。 A. 仅修改头指针 B. 仅修改尾指针 C. 头、尾指针都要修改 D. 头、尾指针可能都要修改 9. 递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。 A.队列 B.多维数组 C.栈 D. 线性表 10.设C语言数组Data[m+1]作为循环队列SQ的存储空间, front为队头指针,rear为队尾指针,则执行出队操作的语句为() A.front=front+1 B. front=(front+1)% m C.rear=(rear+1)%(m+1) D. front=(front+1)%(m+1) 11.循环队列的队满条件为 ( ) A. (sq.rear+1) % maxsize ==(sq.front+1) % maxsize; B. (sq.front+1) % maxsize ==sq.rear C. (sq.rear+1) % maxsize ==sq.front D.sq.rear ==sq.front

数据结构栈和队列

实验二栈和队列 一、实验目的 1. 掌握栈的顺序表示和实现 2. 掌握队列的链式表示和实现 二、实验内容 1. 编写一个程序实现顺序栈的各种基本运算。 2. 实现队列的链式表示和实现。 三、实验步骤 1. 初始化顺序栈 2. 插入元素 3. 删除栈顶元素 4. 取栈顶元素 5. 遍历顺序栈 6. 置空顺序栈 7. 初始化并建立链队列 8. 入链队列 9. 出链队列 10. 遍历链队列 四、实现提示 1. /*定义顺序栈的存储结构*/ typedef struct { ElemType stack[MAXNUM]; int top; }SqStack; /*初始化顺序栈函数*/ void InitStack(SqStack *p) {q=(SqStack*)malloc(sizeof(SqStack) /*申请空间*/) /*入栈函数*/ void Push(SqStack *p,ElemType x)

{if(p->toptop=p->top+1; /*栈顶+1*/ p->stack[p->top]=x; } /*数据入栈*/ } /*出栈函数*/ ElemType Pop(SqStack *p) {x=p->stack[p->top]; /*将栈顶元素赋给x*/ p->top=p->top-1; } /*栈顶-1*/ /*获取栈顶元素函数*/ ElemType GetTop(SqStack *p) { x=p->stack[p->top];} /*遍历顺序栈函数*/ void OutStack(SqStack *p) { for(i=p->top;i>=0;i--) printf("第%d个数据元素是:%6d\n",i,p->stack[i]);} /*置空顺序栈函数*/ void setEmpty(SqStack *p) { p->top= -1;} 2. /*定义链队列*/ typedef struct Qnode { ElemType data; struct Qnode *next; }Qnodetype; typedef struct { Qnodetype *front; Qnodetype *rear; }Lqueue; /*初始化并建立链队列函数*/ void creat(Lqueue *q)

数据结构栈和队列实验报告

《数据结构》课程实验报告 实验名称栈和队列实验序号实验日期 姓名院系班级学号 专业指导教师成绩 教师评语 一、实验目的和要求 (1)理解栈和队列的特征以及它们之间的差异,知道在何时使用那种数据结构。 (2)重点掌握在顺序栈上和链栈上实现栈的基本运算算法,注意栈满和栈空的条件。 (3)重点掌握在顺序队上和链队上实现队列的基本运算算法,注意循环队队列满和队空的条件。 (4)灵活运用栈和队列这两种数据结构解决一些综合应用问题。 二、实验项目摘要 编写一个程序algo3-1.cpp,实现顺序栈的各种基本运算,并在此基础上设计一个主程序并完成如下功能:(1)初始化栈s; (2)判断栈s是否非空; (3)依次进栈元素a,b,c,d,e; (4)判断栈s是否非空; (5)输出栈长度; (6)输出从栈顶到栈底元素; (7)输出出栈序列; (8)判断栈s是否非空; (9)释放栈。 编写一个程序algo3-3.cpp,实现顺序环形队列的各种基本运算,并在此基础上设计一个主程序并完成如下功能: (1)初始化队列q; (2)判断队列q是否非空; (3)依次进队列a,b,c; (4)出队一个元素,输出该元素; (5)输出队列q的元素个数; (6)依次进队列元素d,e,f; (7)输出队列q的元素个数; (8)输出出队序列; (9)释放队列。

三、实验预习内容 栈的顺序存储结构及其基本运算实现(初始化栈,销毁栈,求栈的长度,判断栈是否为空,进栈,取栈顶元素,显示栈中元素) 队列的顺序存储结构及其基本运算实现(初始化队列,销毁队列,判断队列是否为空,入队列,出队列) 三、实验结果与分析 3-1 #define maxsize 100 #include #include using namespace std; typedef char ElemType; typedef struct { ElemType data[maxsize]; int top; } SqStack; void InitStack(SqStack * &s) { s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1; } int StackEmpty(SqStack *s) { return(s->top==-1); } int Push(SqStack *&s,ElemType e) { if(s->top==maxsize-1) return 0; s->top++; s->data[s->top]=e; return 1; } int Pop(SqStack *&s,ElemType &e) { if(s->top==-1) return 0; e=s->data[s->top];

栈和队列综合实验报告

栈和队列综合实验报告 一、实验目的 (1)能够利用栈和队列的基本运算进行相关操作。 (2)进一步熟悉文件的应用 (3)加深队列和栈的数据结构理解,逐步培养解决实际问题的编程能力。 二、实验环境 装有Visual C++的计算机。 本次实验共计4学时。 三、实验内容 以下两个实验任选一个。 1、迷宫求解 设计一个迷宫求解程序,要求如下: 以M × N表示长方阵表示迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 能任意设定的迷宫 (选作)如果有通路,列出所有通路 提示: 以一个二维数组来表示迷宫,0和1分别表示迷宫中的通路和障碍,如下图迷宫数据为:11

01 01 01 01 01 01 01 11 入口位置:1 1 出口位置:8 8 四、重要数据结构 typedef struct{ int j[100]; int top;栈顶指针,一直指向栈顶 }stack;//存放路径的栈 int s[4][2]={{0,0},{0,0},{0,0},{0,0}}; //用于存放最近的四步路径坐标的数组,是即使改变的,即走一步,便将之前的坐标向前移一步,将最早的一步坐标覆盖掉,新的一步放入数组末尾其实功能和队列一样。 其作用是用来判断是否产生了由于本程序算法产生的“田”字方格内的死循环而准备的,用于帮助跳出循环。 五、实现思路分析 if(a[m][n+1]==0&&k!=3){ n++; k=1; o=0; }else if(a[m+1][n]==0&&k!=4){ m++;

k=2; o=0; }else if(a[m][n-1]==0&&k!=1){ n--; k=3; o=0; }else if(a[m-1][n]==0&&k!=2){ m--; k=4; o=0; }else{ o++;} if(o>=2){ k=0; }//向所在方格的四个方向探路,探路顺序为→↓←↑(顺时针),其中if判断条件内的&&k!=n和每个语句块中的对k赋值是为防止其走回头路进入死循环,而最后一个else{}内语句是为了防止进入死路时,不能走回头路而造成的死循环。 push(q,m,n);//没进行一次循环都会讲前进的路径入栈。 if (pushf(&s[0][0],m,n)==0){ k=3;}//用来判断是否产生了由于本程序探路算法产生的“田”字方格内的死循环而准备的,用于帮助跳出田字循环。同时会将路径存入用于下次判断 六、程序调试问题分析 最开始写完时是没有死路回头机制的,然后添加了两步内寻路不回头机制。 第二个是“田”字循环问题,解决方法是加入了一个记录最近四步用的数组和一个判断田字循环的函数pushf。

《数据结构练习题》栈和队列

栈和队列 1 简述栈和线性表的区别。 2 简述栈和队列这两种数据结构的相同点和不同点。 3 如果进栈的元素序列为A,B,C,D,则可能得到的出栈序列有多少种?写出全部的可能序列。 4 如果进栈的元素序列为1,2,3,4,5,6,能否得到4,3,5,6,1,2和1,3,5,4,2,6的出栈序列?并说明为什么不能得到或如何得到。 5 写出下列程序段的运行结果(栈中的元素类型是char): main( ) { SEQSTACK s,*p; char x, y; p = &s; initstack(p); x = ′c′; y = ′k′; push(p,x); push(p,′a′); push(p,y); x = pop(p); push(p,′t′); push(p,x); x = pop(p); push(p,′s′);

while(!empty(p)) { y = pop(p); printf(″%c″,y);} printf(″%c\n″,x); } 6 将一个非负十进制整数转换成二进制数,用非递归算法和递归算法来实现。 7 写一算法将一顺序栈中的元素依次取出,并打印元素值。 8 设单链表中存放着n个字符,试编一算法,判断该字符串是否有中心对称关系,例如xyzzyx,xyzyx都算是中心对称的字符串。 9 写出下列程序段的运行结果(队列中的元素类型是char): main( ) { SEQQUEUE a, *q; char x, y; q = &a; x=′e′; y=′c′; initqueue(q); enqueue(q,′h′); enqueue(q,′r′); enqueue(q,y); x = dequeue(q);

栈和队列及其应用实验报告

数据结构实验报告 实验名称:栈和队列及其应用 班级:12级电气本2 学号:2012081227 姓名:赵雪磊 指导教师:梁海丽 日期:2013年9月23日 数学与信息技术学院 一、实验目的

1. 掌握栈和队列的概念。 2.掌握栈和队列的基本操作(插入、删除、取栈顶元素、出队、入队等)。 3.理解栈和队列的顺序、链式存储。 二、实验要求 利用顺序栈将任意一个给定的十进制数转换成二进制、八进制、十六进制数并输出。 三、算法描述 #include "stdafx.h" #include "iomanip.h" void D10to2_8_16(int i,char radix) { char m; if(i>=radix) D10to2_8_16(i/radix,radix); if((m=i%radix+'0')>0x39) m+=7; cout << m; } void main(void) { int nDec; cout << "请输入一个十进制正整数...\n" << "nDec="; cin >> nDec; cout << "转换为二进制是:"; D10to2_8_16(nDec,2); cout << endl; cout << "转换为八进制是:0"; D10to2_8_16(nDec,8); cout << endl; cout << "转换为十六进制是:0x"; D10to2_8_16(nDec,16); cout << endl; } 四、程序清单 #include #include #define N 2 //可以控制进制转换 using namespace std; typedef struct{ int *top; int *base; int stacksize; }stack;

《数据结构》实验二 栈和队列

《数据结构》实验指导及报告书 2014 / 2015 学年第 1学期 姓名: 学号: 班级: 指导教师:徐江 计算机科学与工程学院 2014

实验二栈和队列 一、实验目的 1、掌握栈的结构特性及其入栈,出栈操作; 2、掌握队列的结构特性及其入队、出队的操作,掌握循环队列的特点及其操作。 二、实验内容和要求 1、阅读下面程序,将函数Push和函数Pop补充完整。要求输入元素序列1 2 3 4 5 e,运行结果如下所示。 #include #include #define ERROR 0 #define OK 1 #define STACK_INT_SIZE 10 /*存储空间初始分配量*/ #define STACKINCREMENT 5 /*存储空间分配增量*/ typedef int ElemType; /*定义元素的类型*/ typedef struct{ ElemType *base; ElemType *top; int stacksize; /*当前已分配的存储空间*/ }SqStack; int InitStack(SqStack *S); /*构造空栈*/ int push(SqStack *S,ElemType *e); /*入栈*/ int Pop(SqStack *S,ElemType *e); /*出栈*/ int CreateStack(SqStack *S); /*创建栈*/ void PrintStack(SqStack *S); /*出栈并输出栈中元素*/ int InitStack(SqStack *S){ S->base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemType)); if(!S->base) return ERROR;

相关文档
相关文档 最新文档