数据结构:第3章 栈和队列.pptVIP

  • 10
  • 0
  • 约2.16万字
  • 约 116页
  • 2021-11-13 发布于安徽
  • 举报
例3.4 编写一个算法利用顺序栈判断一个字符串是否是对称串。如: str=“abcddcba” 解:对于字符串str,先将其所有元素进栈。然后从头开始扫描str,并出栈元素,两者进行比较。 bool symmetry( char str[ ] ) { int i; char e; SqStack *st; InitStack(st); for (i=0; str[i]!=‘\0’; i++ ) Push( st, str[i] ); for (i=0; str[i]!=‘\0’; i++ ) { Pop(st, e); if (str[i]!=e) { DestroyStack(st); return false; } } DestroyStack(st); return true; } int Match( char exp[ ], int n ) { int i=0; char e; bool match=true; LiStack *st; InitStack(st); // 初始化栈st while ( in match==true) // 循环扫描exp的每个字符 { if ( exp[i]==‘(’ ) // 若当前字符是左括号 Push(st, exp[i] ); // 左括号入栈 else if ( exp[i]==‘)’ ) // 否则,若当前字符是右括号 { if ( Pop( st, e )==true) // 若退栈成功 { if (e!=‘(‘ ) // 若退栈符号不是左括号 match=false; // 左右括号不匹配 } else match=false; // 当栈是空的,右括号无匹配的左括号 } i++; // 继续下个字符 } if (Stackempty(st)==false) // 若栈非空, match=false; // 则左括号无右括号匹配 DestroyStack(st); return match; } 求解迷宫(1,1)到(M,N)路径的过程是:先将入口进栈(初始方位设置为-1),在栈不空时循环:取栈顶方块(不退栈),若该方块是出口,则输出栈中方块即为路径。否则,找下一个可走的相邻方块,若不存在这样的方块,则退栈。若存在这样的方块,则将其方位保存到栈顶元素中,并将这个可走的相邻方块进栈(初始方位设置为-1)。 -1 2 3 2 2 2 2 2 1 1 1 1 i j di i j di i j di i j di St[0] [1] [2] [3] [4] …………. 为了保证试探的可走相邻方块不是已走路径上的方块,如(i,j)已进栈,在试探(i+1,j)的下一可走方块时,又试探到(i,j),这样可能会引起死循环,为此,在一个方块进栈后,将对应的mg数组元素值改为-1(变为不可走的相邻方块),当退栈时(表示没有可走相邻方块),将其恢复为0。 int mg[M+2][N+2]={ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1,-1,-1, 1,-1,-1,-1, 1, 0, 1}, {1, 0,-1, 1,-1, 0,-1, 1, 0, 1}, {1, 0,-1,-1,-1, 1, 1, 0, 0, 1}, {1, 0, 1, 1, 1, 0, 0, 0, 0

文档评论(0)

1亿VIP精品文档

相关文档