[关闭]
@ghostfn1 2016-07-23T15:11:28.000000Z 字数 658 阅读 2854

判断回文字符串——栈

C++ 算法


Update Time:160723 Noon Saturday.

栈是一种后进先出的线性表,简称 LIFO结构
栈只能在一端进行插入和删除操作,我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。示意图如下[1]

栈操作的示意图

可以用栈来判断回文字符串[2]

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5. char a[101],s[101];
  6. int i,len,mid,next,top;
  7. gets(a); //Read the strings.
  8. len=strlen(a);
  9. mid=len/2-1; //string's midpoint.
  10. top=0;//Stack initialization
  11. for(i=0;i<=mid;i++)
  12. s[++top]=a[i]; //Push
  13. //determine string's length.
  14. if(len%2==0)
  15. next=mid+1;
  16. else
  17. next=mid+2;
  18. //Matching.
  19. for(i=next;i<=len-1;i++)
  20. {
  21. if(a[i]!=s[top])
  22. break;
  23. top--;
  24. }
  25. //top==0 means that matching is complete.
  26. if(top==0)
  27. printf("YES");
  28. else
  29. printf("NO");
  30. getchar();getchar();
  31. return 0;
  32. }

比如:
输入:
1121211
结果:
YES

输入:
1121
结果:
NO


[1] 《啊哈!算法》
[2] 《啊哈!算法》
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注