美文网首页
作业帮做-栈结构验证回文数

作业帮做-栈结构验证回文数

作者: 朽木自雕也 | 来源:发表于2018-11-09 01:06 被阅读211次

    实验目的

    利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Right”,否则输出 “Wrong”。例如:”aba”就是回文,从左向右读,从右向左读 一样。

    实验内容

    确定一个字符栈顺序存储结构,存储最大元素个数为10个
    开放一个对外部调用的函数 int symmetry(char *string),判断字符内容的对称性

    实验步骤

    1. 创建一个字符栈顺序存储结构的结构体CharStack以及结构体指针类型CharStackLink
    #define MAXSTACK 10
    
    /** 字符栈模型 */
    typedef struct {
        char Data[MAXSTACK];
        int top;
    } CharStack, *CharStackLink;
    
    1. 开放一个外部接口 int symmetry(char *string) ,这个函数对外来字符串提供验证是否回文的判断。
    /** 字符回文判断,1为回文,0为非回文 */
    int symmetry(char *string);
    
    1. 内部实现 symmetry 函数依赖于三个方法charStackInit(初始化栈)、charStackPush(元素进栈)、charStackPop(元素出栈)

    3.1. 实现内部创建栈的方法 charStackInit ,并返回这个栈实例对象

    /** 初始化栈 */
    CharStackLink charStackInit() {
        CharStackLink stack = (CharStackLink)malloc(sizeof(CharStack));
        stack->top = -1;
        return stack;
    }
    

    3.2. 实现内部元素进栈方法charStackPush,接收两个参数,一个是元素将要压入的栈stack,进栈元素。

    /** 进栈 */
    void charStackPush(CharStackLink stack, char data) {
        if (stack->top >= MAXSTACK) {
            err(1, "栈已满");
            return;
        }
        stack->top = stack->top + 1;
        stack->Data[stack->top] = data;
    }
    

    3.3. 实现内部元素出栈方法charStackPop,接收一个对应出的栈stack参数,返回一个出栈元素

    /** 出栈 */
    char charStackPop(CharStackLink stack) {
        if (stack->top <= -1) {
            err(1, "栈已空");
            return 0;
        }
        char a = stack->Data[stack->top];
        stack->top = stack->top - 1;
        return a;
    }
    

    3.4. 实现symmetry方法,接收一个外部传来的string,返回一个二元 int 值,0为非回文数,1为回文数

    /** 字符栈模型回文 1 为回文树 0 为非回文数 */
    int symmetry(char *string) {
        //初建栈
        CharStackLink charStack = charStackInit();
        for (int i = 0; string[i]; i++) {
            charStackPush(charStack, string[i]);
        }
        for (int i = 0; string[i]; i++) {
            char c = string[i];
            char stackC = charStackPop(charStack);
            if (c != stackC) {
                return 0;
            }
        }
        free(charStack);
        charStack = NULL;
        return 1;
    }
    

    3.5. 在入口main函数中实现调用,为了方便多次测试写入一个do -> while循环,代码如下

    int main(int argc, const char * argv[]) {
        int flag = 1;
        do {
            char charArr[10];
            printf("请输入需要验证文本:");
            scanf("%s",charArr);
            int isHuiWen = symmetry(charArr);
            printf("%s\n", isHuiWen?"Right":"Wrong");
            printf("是否继续,输入-1退出:");
            scanf("%d",&flag);
        } while (flag != -1);
    
        return 0;
    }
    

    3.6 到这里代码已经编写完毕,运行,输入多次,查看结果

    第一次运行测试

    请输入需要验证文本:12321
    Right
    是否继续,输入-1退出:1
    请输入需要验证文本:12344321
    Right
    是否继续,输入-1退出:1
    请输入需要验证文本:6556
    Right
    是否继续,输入-1退出:1
    请输入需要验证文本:654abc
    Wrong
    是否继续,输入-1退出:1
    请输入需要验证文本:mlmk
    Wrong
    是否继续,输入-1退出:-1
    Program ended with exit code: 0
    

    第二次运行测试

    1
    Right
    是否继续,输入-1退出:1
    请输入需要验证文本:122
    Wrong
    是否继续,输入-1退出:1
    请输入需要验证文本:121
    Right
    是否继续,输入-1退出:1
    请输入需要验证文本:bab
    Right
    是否继续,输入-1退出:1
    请输入需要验证文本:babcd
    Wrong
    是否继续,输入-1退出:1
    请输入需要验证文本:babcdcbab
    Right
    是否继续,输入-1退出:
    

    相关文章

      网友评论

          本文标题:作业帮做-栈结构验证回文数

          本文链接:https://www.haomeiwen.com/subject/gbxnxqtx.html