算法:C语言实现》习题4.8—— 给定两个序列,判断第二个序列是否可以由第一个序列出栈得到

来源:互联网 发布:淘宝知识产权侵权申诉 编辑:程序博客网 时间:2024/05/16 00:47

《算法:C语言实现》 习题4.8

这里,为了简化问题,假设序列的每个元素都不一样。

#define N 10#include <stdio.h>int judge(char *s, char *d){char com[N] = {0};int end = 0;while(1){if(*d == '\0') //成功return 0;if(*s == NULL && com[end-1] != *d)//入栈序列为空并且栈顶元素不等于待比较元素,则失败,返回-1return -1;if(*d == *s){s = s + 1;d = d + 1;}else if(end > 0 && *d == com[end - 1]){d = d + 1;com[end] = 0;end --;}else if(*d != *s){if( end == 0 || (end > 0 && *d != com[end - 1]) ){com[end] = *s;end ++;s = s + 1;}}}return 0;}int main(int argc, char **argv){char source[N] = {0}, des[N] = {0};int i = 0;printf("请输入第一个字符串:\n");scanf("%s",source);while(i ++ < 10){printf("请输入待比较字符串:\n");scanf("%s",des);int tag = judge(source,des);if(tag == 0)printf("Exist\n");elseprintf("Not exitst\n");}return 0;}