[其它课程]数据结构ch31_第1页
[其它课程]数据结构ch31_第2页
[其它课程]数据结构ch31_第3页
[其它课程]数据结构ch31_第4页
[其它课程]数据结构ch31_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1例5: 表达式求值4+ 2 3 -10/54 + 6 - 2 =8=算术四则运算规则(1) 先乘除,后加减(2) 从左算到右(3) 先括号内,后括号外4+ 2 3 -10/54 + 6 - 10/5 = 10=- 10/5= 10 - 2 = 810 - 2 =2表达式常数标识符操作数(operand)运算符(operator)界限符(delimiter)算术逻辑关系括号结束符31 2:1的优先级低于 21的优先级等于 21的优先级高于 212+-*/()#+-*/()#xopndelse 比较ch和optr栈顶元素的优先级 case : 退栈,运算结果入栈5operandtype eval

2、uateexpression() /算术表达式求值的算符优先算法. initstack(optr); push(optr,#); initstack(opnd); c=getchar(); while(c!=# | gettop(optr)!=ch) if(!in(c,op) push(opnd,c); c=getchar(); /非运算符,则进栈 else switch(precede(gettop(optr,c) case : /退栈,并将运算结果入栈 pop(optr,theta); pop(opnd,b); pop(opnd,a); push(opnd,operate(a,theta,

3、b); break; /switch /while return gettop(opnd);/evaluateexpression7步骤 optr栈 opnd栈 输入字符 主要操作例: 利用算法evaluationexpress 求表达式 3*(7-2)的值13 *(7-2)#push( opnd,3 )#2#3* (7-2)#push( optr,* )3# *3 ( 7-2)#push( optr,( )4# * (3 7-2)#push( opnd,7 )5# * (3 7- 2)#push(optr,-)6# * ( -3 72 )#push(opnd,2)7# * ( -3 7 2)

4、 #operat(7,-,2)8# * ( 3 5) #pop(optr)消括号9# *3 5#operat(3,*,5)10#15#return(gettop(opnd)83.3 栈与递归的实现递归函数: 直接或间接调用自己的函数1. 递归定义的数学函数: 阶乘函数: 0n ) 1(0n 1)(若若nfactnnfact 2阶fibonaci数列: )2() 1(1n 10n 0)(其它若若nfibnfibnfib9 树 2. 具有递归特性的数据结构:rootlchildrchild 广义表 a=(a,a)3. 可递归求解的问题: 八皇后问题 hanoi塔问题 10hanoi 塔问题xyz规

5、则:(1) 每次只能移动一个圆盘(2) 圆盘可以插在x,y和z中的任一塔座上(3) 任何时刻不可将较大圆盘压在较小圆盘之上11void hanoi(int n, char x, char y, char z) /将塔座x上由小到大且自上而下编号为1至n的n个圆盘按规 / 则搬到塔座z上,y可用作辅助塔座1 2 if(n=1)3 move(x,1,z); /将编号为1的圆盘从x搬到z4 else5 hanoi(n-1,x,z,y); /将x上编号为1至n-1的圆盘移到y, /z作辅助塔 6 move(x,n,z); /将编号为n的圆盘从x移到z7 hanoi(n-1,y,x,z); /将y上编号

6、为1至n-1的圆盘移到z, /x作辅助塔 8 9 12函数调用过程调用前, 系统完成:(1)将实参,返回地址等传递给被调用函数(2)为被调用函数的局部变量分配存储区(3)将控制转移到被调用函数的入口调用后, 系统完成:(1) 保存被调用函数的计算结果(2)释放被调用函数的数据区(3)依照被调用函数保存的返回地址将控制转移到调用函数13函数调用过程当多个函数构成嵌套调用时, 遵循后调用先返回栈14int first(int s,int t);int second(int d);int main() int m,n; . first(m,n); 1:.int first(int s,int t)

7、int i; . second(i); 2:.int second(int d) int x,y; .mn2ixy1mni栈顶.mn1mni栈顶15递归函数调用的实现“层次”主函数第1次调用第 i 次调用0层1层i 层“递归工作栈”“工作记录”实在参数,局部变量,返回地址16hanoi(3,a,b,c)hanoi(2,a,c,b)move (a,3,c)hanoi(2,b,a,c)0117hanoi(1,a,b,c)move(a,2,b)hanoi(1,c,a,b)2hanoi(3,a,b,c)hanoi(2,a,c,b)move (a,3,c)hanoi(2,b,a,c)01183move(

8、a,1,c)hanoi(3,a,b,c)hanoi(2,a,c,b)move (a,3,c)hanoi(2,b,a,c)hanoi(1,a,b,c)move(a,2,b)hanoi(1,c,a,b)012move(c,1,b)193move(a,1,c)hanoi(3,a,b,c)hanoi(2,a,c,b)move (a,3,c)hanoi(2,b,a,c)hanoi(1,a,b,c)move(a,2,b)hanoi(1,c,a,b)012move(c,1,b)hanoi(1,b,c,a)move(b,2,c)hanoi(1,a,b,c)20hanoi(3,a,b,c)hanoi(2,a,c

9、,b)move (a,3,c)hanoi(2,b,a,c)hanoi(1,a,b,c)move(a,2,b)hanoi(1,c,a,b)hanoi(1,b,c,a)move(b,2,c)hanoi(1,a,b,c)0123move(a,1,c)move(c,1,b)move(b,1,a)move(a,1,c)21move(a,2,b)hanoi(1,c,a,b)hanoi(3,a,b,c)321abchanoi(2,a,c,b)3abc21hanoi(1,a,b,c)3abc12231abc3abc2122321abc321abcmove (a,3,c)hanoi(2,b,a,c)321abc

10、hanoi(1,b,c,a)321abcmove(b,2,c)321abchanoi(1,c,a,b)3abc2123void main (void) int n; unsigned char a,b,c; n=3; a=1; b=2; c=3; hanoi(n, a, b, c);0: . . .0 层24void main (void) int n; unsigned char a,b,c; n=3; a=1; b=2; c=3; hanoi(n, a, b, c);0: . . .0 层25void main (void) int n; unsigned char a,b,c; n=3;

11、 a=1; b=2; c=3; hanoi(n, a, b, c);0: . . .0 层26void main (void) int n; unsigned char a,b,c; n=3; a=1; b=2; c=3; hanoi(n, a, b, c);0: . . .0 层27void main (void) int n; unsigned char a,b,c; n=3; a=1; b=2; c=3; hanoi(n, a, b, c);0: . . .0 层0, 3, a, b, c28void hanoi(int n, char x, char y, char z)1 2 if(

12、n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 1 层0, 3, a, b, c3, a, b, c29void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 1 层0, 3, a, b, c3, a, b, c30void hanoi(int n, char x, ch

13、ar y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 1 层0, 3, a, b, c3, a, b, c31void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 1 层0, 3, a, b, c3, a, b, c2, a, c, b

14、32void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 1 层0, 3, a, b, c3, a, b, c2, a, c, b6, 2, a, c, b33void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi

15、(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, a, c, b6, 2, a, c, b34void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, a, c, b6, 2, a, c, b35void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4

16、else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, a, c, b6, 2, a, c, b36void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, a, c, b1, a, b, c6, 2, a, c, b37void hanoi(in

17、t n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, a, c, b1, a, b, c6, 2, a, c, b6, 1, a, b, c38void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n

18、-1,y,x,z); 8 9 3 层0, 3, a, b, c1, a, b, c6, 2, a, c, b6, 1, a, b, c39void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 3 层0, 3, a, b, c1, a, b, c6, 2, a, c, b6, 1, a, b, c40void hanoi(int n, char x, char y, char z)1 2

19、if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z);7 hanoi(n-1,y,x,z); 8 9 3 层0, 3, a, b, c1, a, b, ca, 1, c6, 2, a, c, b6, 1, a, b, c41void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 3 层0, 3, a, b, c1, a,

20、 b, c6, 2, a, c, b6, 1, a, b, c42void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, a, c, ba, 2, b6, 2, a, c, b43void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,

21、z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, a, c, b1,c,a,b6, 2, a, c, b44void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, a, c, b1,c,a,b6, 2, a, c, b8, 1, c, a, b45void hanoi(int

22、 n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 3 层0, 3, a, b, c1, c, a, b6, 2, a, c, b8, 1, c, a, b46void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z);

23、8 9 3 层0, 3, a, b, c1, c, a, b6, 2, a, c, b8, 1, c, a, b47void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z);7 hanoi(n-1,y,x,z); 8 9 3 层0, 3, a, b, c1, c, a, bc, 1, b6, 2, a, c, b8, 1, c, a, b48void hanoi(int n, char x, char y, char z)1 2 if(n=

24、1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 3 层0, 3, a, b, c1, c, a, b6, 2, a, c, b8, 1, c, a, b49void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, a, c, b6, 2,

25、a, c, b50void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, a, c, b6, 2, a, c, b51void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-

26、1,y,x,z); 8 9 1 层0, 3, a, b, c3, a, b, ca, 3, c52void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 1 层0, 3, a, b, c3, a, b, c2, b, a, c53void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(

27、n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 1 层0, 3, a, b, c3, a, b, c2, b, a, c8, 2, b, a, c54void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, b, a, c8, 2, b, a, c55void hanoi(int n, char x,

28、 char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, b, a, c8, 2, b, a, c56void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, b

29、, a, c8, 2, b, a, c57void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, b, a, c1, b, c, a8, 2, b, a, c58void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 m

30、ove(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, b, a, c1, b, c, a8, 2, b, a, c6, 1, b, c, a59void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 3 层0, 3, a, b, c1, b, c, a8, 2, b, a, c6, 1, b, c, a60void hanoi(int

31、 n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 3 层0, 3, a, b, c1, b, c, a8, 2, b, a, c6, 1, b, c, a61void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z);

32、8 9 b, 1, a3 层0, 3, a, b, c1, b, c, a8, 2, b, a, c6, 1, b, c, a62void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 3 层0, 3, a, b, c1, b, c, a8, 2, b, a, c6, 1, b, c, a63void hanoi(int n, char x, char y, char z)1 2 if(n

33、=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层2, b, a, cb,2,c0, 3, a, b, c8, 2, b, a, c64void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 1,a,b,c2 层2, b, a, c0, 3, a, b, c8, 2,

34、b, a, c65void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 1,a,b,c2 层2, b, a, c0, 3, a, b, c8, 2, b, a, c8, 1, a, b, c66void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 mov

35、e(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 3 层0, 3, a, b, c1, a, b, c8, 2, b, a, c8, 1, a, b, c67void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 3 层0, 3, a, b, c1, a, b, c8, 2, b, a, c8, 1, a, b, c68void hanoi(int n, char x,

36、char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 a, 1, c3 层0, 3, a, b, c1, a, b, c8, 2, b, a, c8, 1, a, b, c69void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 3

37、 层0, 3, a, b, c1, a, b, c8, 2, b, a, c8, 1, a, b, c70void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, b, a, c8, 2, b, a, c71void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5

38、 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 2 层0, 3, a, b, c2, b, a, c8, 2, b, a, c72void hanoi(int n, char x, char y, char z)1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 1 层0, 3, a, b, c3, a, b, c73void hanoi(int n, char x, char y, char z)

39、1 2 if(n=1)3 move(x,1,z); 4 else5 hanoi(n-1,x,z,y); 6 move(x,n,z); 7 hanoi(n-1,y,x,z); 8 9 1 层0, 3, a, b, c3, a, b, c74void main (void) int n; unsigned char a,b,c; n=3; a=1; b=2; c=3; hanoi(n, a, b, c);0: . . .0 层75队列-queue 队列是一种先进先出(first in first out-fifo) 的线性表. 它只允许在表的一端进行插入,而在另一端删除元素.),(21naaaqa

40、1a2a3an.入队列队头队尾76队列-queue 队列是一种先进先出(first in first out-fifo) 的线性表. 它只允许在表的一端进行插入,而在另一端删除元素.),(21naaaq出队列a1a2a3an.队头队尾77队列-queue 队列是一种先进先出(first in first out-fifo) 的线性表. 它只允许在表的一端进行插入,而在另一端删除元素.),(21naaaq出队列a1a2a3an.队头队尾78队列-queue 队列是一种先进先出(first in first out-fifo) 的线性表. 它只允许在表的一端进行插入,而在另一端删除元素.),(21

41、naaaq出队列a1a2a3an.队头队尾79队列-queue 队列是一种先进先出(first in first out-fifo) 的线性表. 它只允许在表的一端进行插入,而在另一端删除元素.),(21naaaq出队列a1a2a3an.队头队尾80队列-queue 队列是一种先进先出(first in first out-fifo) 的线性表. 它只允许在表的一端进行插入,而在另一端删除元素.),(21naaaq出队列a1a2a3an.队头队尾81队列-queue 队列是一种先进先出(first in first out-fifo) 的线性表. 它只允许在表的一端进行插入,而在另一端删除元素

42、.),(21naaaqa1a2a3an.出队列入队列队头队尾82双端队列-dequea1a2a3an.插入删除插入删除 输出受限的双端队列端1端283双端队列-dequea1a2a3an.插入删除插入删除 输出受限的双端队列 输入受限的双端队列端1端2840n , 2 , 1,|nielemsetaadii队列的抽象数据类型数据对象:数据关系:端为队列尾端为队列头约定n1111a ,a , 2 , 1,| ,nidaaaariiii基本操作: (1) initqueue (&q) /构造空队列 (2) destroyqueue (&q) /销毁队列 (3) clearqueue (&s) /清

43、空队列 (4) queueempty(s) /判空. 空-true,adt queue 85队列的抽象数据类型(续) (5) queuelength(q) /取队列长度 (6) gethead (q,&e) /取队头元素, (7) enqueue (&q,e) /入队列 (8) dequeue (&q,&e) /出队列 (9) queuetraverse(q,visit() /遍历adt queue86naaa,21链队列.datanext队头队尾q.frontq.rear87单链队列-队列的链式存储结构typedef struct qnode qelemtype data; struct q

44、node *next;qnode, *queueptr;typedef struct queueptr front; /队头指针 queueptr rear; /队尾指针linkqueue; 88q.frontq.rearxq.frontq.rearxyq.frontq.rearxy(a) 空队列(b) 元素x入队列(c) 元素y入队列(d) 元素x出队列q.frontq.rear89链队列基本操作的实现(1)初始化status initqueue (linkqueue &q) q.front=q.rear=(queueptr) malloc(sizeof(qnode); if(!q.fron

45、t) exit(overflow); q.front-next=null; return ok;/initqueue90(2).销毁队列status destroyqueue (linkqueue &q) while(q.front) q.rear=q.front-next; free(q.front); q.front=q.rear; return ok:/ destroyqueue链队列基本操作的实现(续)91(3).清空队列status destroyqueue (linkqueue &q) while(q.front) q.rear=q.front-next; free(q.front

46、); q.front=q.rear; return ok:/ destroyqueue链队列基本操作的实现(续)92(4) 队列判空 status queueempty (linkqueue q) return (q.front=q.rear); / queueempty(5) 求队列长度 int queuelength (linkqueue q) return (q.rear-q.front); / queuelength链队列基本操作的实现(续)93(6).取队头元素status gethead (linkqueue q, qelemtype &e) if(q.front=q.rear)

47、return error; e=q.front-next-data; return ok;/gethead链队列基本操作的实现(续)94(7).入队列status enqueue(linkqueue &q,qelemtype e) p=(queueptr)malloc(sizeof(qnode); if(!p) exit(overflow); p-data=e; p-next=null; q.rear-next=p; q.rear=p; return ok;/enqueue链队列基本操作的实现(续)95(8).出队列status dequeue (linkqueue &q,qelemtype

48、&e) if(q.front=q.rear) return error; p=q.front-next; e=p-data; q.front-next=p-next; if(q.rear=p) q.rear=q.front; free(p); return ok;/dequeue链队列基本操作的实现(续)96(9) 链队列的遍历 status queuetraverse (linkqueue q, status (*visit)(elemtype) for(p=q.front-next;pdata) return error; / queuetraverse status visit(elemtype e) printf(“the value of the element is %dn”, (int) e);链队列基本操作的实现(续)97q.front012345q.rearq.frontq.rearj3q.frontq.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论