出栈序列的合法性!!

lidjxy 2012-11-06 03:54:29
求大神们讲一下思路……
入栈是1,2,3……n

输入n以及出栈序列,判断合法性~
...全文
387 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

  #include <stdio.h>
 
  #define MAX_SIZE 1000
 
 int pop[MAX_SIZE+1];
 int flag[MAX_SIZE+1];
 
 /* 
  * match程序是基于以下结论.
  * 一个合法的pop序列满足这样的关系:
  * 对任何两个相邻的数(ai, ai+1),
  * 若ai+1 > ai,则ai+1 大于前面所有的数
  * 若ai+1 < ai,则比ai+1小1的数肯定在前面已经出现
  *
  */
 int match(int pop[], int size)
 {
     int i;
     int max = 0;
 
     memset(flag, 0, sizeof(flag)) /* 所有标志都清0 */
 
     for (i=1; i<=size; i++) {
         if (pop[i]>pop[i-1] && pop[i]>max) {
             max = pop[i];
         } else if (pop[i]<pop[i-1] && flag[pop[i-1]]) {
             flag[i] = 1;
         } else {
             return 0;
         }
     }
     return 1;
 }
 
 int main(void)
 {
     int n;
    int i;
     
     /* 读入pop序列,下标从1开始 */
     scanf("%d", &n);
     for (i=1; i<=n; i++) scanf("%d", &pop[i]);
 
     /*
      * 数组第0项作哨兵,
      */
     pop[0] = 0;
 
     if (match(pop, n)) printf("yes");
     else printf("no");
 
     return 0;
 }
lidjxy 2012-11-06
  • 打赏
  • 举报
回复
一定有人会的!

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧