前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用栈写一算法解决特定序列识别判断问题

利用栈写一算法解决特定序列识别判断问题

作者头像
戈贝尔光和热
发布2018-12-27 15:06:14
7500
发布2018-12-27 15:06:14
举报
文章被收录于专栏:HUBU生信HUBU生信

question:试写一算法,识别依次读入的一个以@为结束字符序列是否为形如“序列1&序列2”模式的字符序列。其中序列1和序列2均不含字符&,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属于该模式的字符序列,而'1&3&3&1'则不满足该字符序列。

answer:我的思路是这样的,既然这个字符串是一个回文序列,显然利用栈”先进后出,后进先出“的特点很容易解决这个问题。先将每个字符全部依次插入,然后利用base和top指针进行判断。 切记思路要清晰。

具体解答如下:

代码语言:javascript
复制
/*试写一算法,识别依次读入的一个以@为结束字符序列是否为形如“序列1&序列2”模式的
字符序列。其中序列1和序列2均不含字符&,且序列2是序列1的逆序列。*/
#include "stdafx.h"
#include "malloc.h"
#define  BASIC_LENGTH  100
#define  INCREMENT  10
typedef  char  DataType;
typedef  int   Status;
typedef  struct  sqstack
{
    DataType  *base;
    DataType  *top;
    int   length;//实际长度
    int   stacksize;//分配空间长度
}Sqstack;
Status  Init_stack(Sqstack  &S)
{
    S.base = (DataType*)malloc(BASIC_LENGTH*sizeof(DataType));
    if (!S.base)  return -1;
    S.top = S.base;
    S.stacksize = BASIC_LENGTH;
    S.length = 0;
    return  0;
}
Status   Pop_Stack(Sqstack &S, char  ch)
{
    if (S.length == S.stacksize)
    {
        S.base = (DataType*)realloc(S.base,(BASIC_LENGTH+INCREMENT));
        if (!S.base) return  -1;
        else
        {
            S.stacksize = BASIC_LENGTH + INCREMENT;
        }
    }
    *S.top++ = ch;
    S.length++;
    return  0;
}

Status Travel_Stack(Sqstack S)
{
    if (S.base == S.top)  printf("该栈为空");
    else
    {
        while (S.base < S.top)
        {
            printf("%c",*S.base);
            S.base++;
        }
    }
    return  0;
}
int main()
{
    Sqstack  S;
    char  ch;
    Init_stack(S);
    printf("(规则:序列1和序列2关于“&”回文对称)请输入字符,以@符号结尾:\r\n");
    ch = getchar();
    while (ch != '@')
    {
        Pop_Stack(S, ch);
        ch = getchar();
    }
    printf("输入的序列为:");
    Travel_Stack(S);
    printf("\r\n下面对其进行判定:\r\n");
    DataType  *p, *q;
    p = S.base;
    q = S.top - 1;
    while (p < q&&*q == *p&&*p != '&')
    {
        printf("\r\n正在验证:");
        printf("%c和%c", *p, *q);
        if (*p != *q)
        {
            printf("\r\n不匹配规则");
            return  -1;
        }
        p++;
        q--;
    }
    if (p == q&&*p == '&')
    {
        printf("\r\n匹配成功,该字符串满足规则");
    }
    else
    {
        printf("\r\n匹配规则不成功,匹配失败");
    }
    return 0;
}

运行示意图:

全文结束,欢迎在评论区讨论~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/11/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档