严蔚敏数据结构c语言版习题集答案第三章栈与队列.docx
《严蔚敏数据结构c语言版习题集答案第三章栈与队列.docx》由会员分享,可在线阅读,更多相关《严蔚敏数据结构c语言版习题集答案第三章栈与队列.docx(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章 栈与队列 3.15 typedef struct Elemtype *base2; Elemtype *top2; BDStacktype; /双向栈类型 Status Init_Stack(BDStacktype &tws,int m)/初始化一个大小为m的双向栈tws tws.base0=(Elemtype*)malloc(sizeof(Elemtype); tws.base1=tws.base0+m; tws0=tws.base0; tws1=tws.base1; return OK;/Init_Stack Status push(BDStacktype &tws,int i,E
2、lemtype x)/x入栈,i=0表示低端栈,i=1表示高端栈 if(tws0tws1) return OVERFLOW; /留意此时的栈满条件 if(i=0) *tws0+=x; else if(i=1) *tws1-=x; else return ERROR; return OK;/push Status pop(BDStacktype &tws,int i,Elemtype &x)/x出栈,i=0表示低端栈,i=1表示高端栈 if(i=0) if(tws0=tws.base0) return OVERFLOW; x=*-tws0; else if(i=1) if(tws1=tws.ba
3、se1) return OVERFLOW; x=*+tws1; else return ERROR; return OK;/pop 3.16 void Train_arrange(char *train)/这里用字符串train表示火车,H表示硬席,S表示软席 p=train;q=train; InitStack(s); while(*p) if(*p=H) push(s,*p); /把H存入栈中 else *(q+)=*p; /把S调到前部 p+; while(!StackEmpty(s) pop(s,c); *(q+)=c; /把H接在后部/Train_arrange 3.17 int I
4、sReverse()/推断输入的字符串中&前和&后局部是否为逆串,是则返回1,否则返回0 InitStack(s); while(e=getchar()!=&) push(s,e); while(e=getchar()!=) if(StackEmpty(s) return 0; pop(s,c); if(e!=c) return 0; if(!StackEmpty(s) return 0; return 1;/IsReverse 3.18 Status Bracket_Test(char *str)/判别表达式中小括号是否匹配 count=0; for(p=str;*p;p+) if(*p=(
5、) count+; else if(*p=) count-; if (count1) if(gx-1y=old) gx-1y=color; EnQueue(Q,x-1,y); /修改左邻点的颜色 if(y1) if(gxy-1=old) gxy-1=color; EnQueue(Q,x,y-1); /修改上邻点的颜色 if(xm) if(gx+1y=old) gx+1y=color; EnQueue(Q,x+1,y); /修改右邻点的颜色 if(y=0) s=0; else if(m0&n=0) s=n+g(m-1,2*n); else return ERROR; return OK;/g 3
6、.25 Status F_recursive(int n,int &s)/递归算法 if(n0) return ERROR; if(n=0) s=n+1; else F_recurve(n/2,r); s=n*r; return OK;/F_recursive Status F_nonrecursive(int n,int s)/非递归算法 if(n0) return ERROR; if(n=0) s=n+1; else InitStack(s); /s的元素类型为struct int a;int b; while(n!=0) a=n;b=n/2; push(s,a,b); n=b; /whi
7、le s=1; while(!StackEmpty(s) pop(s,t); s*=t.a; /while return OK;/F_nonrecursive 3.26 float Sqrt_recursive(float A,float p,float e)/求平方根的递归算法 if(abs(p2-A)=e) p=(p+A/p)/2; return p;/Sqrt_nonrecursive 3.27 这一题的全部算法以及栈的变更过程请参见数据构造(pascal版),作者不再具体写出. 3.28 void InitCiQueue(CiQueue &Q)/初始化循环链表表示的队列Q Q=(CiL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 严蔚敏 数据结构 语言版 习题集 答案 第三 队列
限制150内