允许任何时候出栈,能否得到下列的每个出栈序列,若.ppt
文本预览下载声明
练习1:有6个元素A、B、C、D、F依次入栈,允许任何时候出栈,能否得到下列的每个出栈序列,若能,给出栈操作的过程,若不能,说明理由。 1) CDBEFA 2) ABEDFC 3) DCEABF 4) BAEFCD 练习2:设计一个算法,用来检查一个C/C++语言程序(文件)中的{}、[]、( )是否配对,若能全部配对,返回1,否则,返回0。 定义一个顺序栈: struct StackSq { ElemType stack[MaxSize]; int top; }; int BracketsCheck(char *fname) { //对由fname所指文件程序进行括号配对检查 struct StackSq a; char ch; FILE *fp; fp=fopen(fname,”r”); if (!fp) exit(1); InitStack(a); ch=fgetc(fp); while(ch!=EOF) { switch(ch) { case ‘{‘: case ‘[‘: case ‘(‘: Push(a,ch); break; case ‘}’: if (Peek(a)==‘{‘) Pop(a); else return 0; break; case ‘]’: if (Peek(a)==‘[‘) Pop(a); else return 0; break; case ‘(‘: if (Peek(a)=‘(‘) Pop(a); else return 0; } ch=fgetc(fp); } //end of while if (EmptyStack(a)) retrun 1; else return 0; fclose(fp); } 作业3: 设计一个算法,判定一个字符串是否是对称字符串。若是,返回1,否则,返回0。 思路:将长度为n的字符串exps的前半部分(exps[0]~exps[n/2])进栈。将exps[(len+1)/2]~exps[len-1]的字符依次与出栈的元素比较,不相同时返回0;若比较完毕且栈为空,则返回1。 typedef char ElemType; int fun(char *exps) { char x; int len,I,same=1; LinkStack *ls; InitStack(ls); for(len=0;exps[len]!=‘\0’;len++); for(i=0;ilen/2;i++) Push(ls,exps[i]); for(i=(len+1)/2;ilen;i++) { Pop(ls,x) if (x!=exps[i]) { same=0; break;} } if (StackEmpty(ls) same==1) return 1; else return 0; } // end of fun() 作业: 1、循环队列的优点是什么,如何判别队空和队满? 2、对于循环队列,写出求队列中元素个数的公式。 元素个数= 0 队空,即front=rear rear-front rearfront rear+QueueSize-front rearfront QueueSize-1 队满,即(rear+1)%QueueSize==front 归纳为: (rear+QueueSize-front)%QueueSize 作业: 采用顺序存储结构,编写一个实现串大小比较运算 strcmp(s,t) ,分别返回 1,0,-1。 思想: 先比较公共部分 再看谁长谁短 int strcmp(char *s,char *t) { int i; for(i=0;(s[i]!=\0) (t[i]!=\0);i++)
显示全部