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

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

作者: 朽木自雕也 | 来源:发表于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退出:

相关文章

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

    实验目的 利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Right”,否则输出 “Wrong”。例如...

  • 作业帮做-栈结构验证

    顺序栈操作验证 实验目的 掌握栈的顺序存储结构; 验证栈的操作特性; 掌握顺序栈的基本操作实现方法。 实验内容 建...

  • 关于回文问题

    回文问题的解法:双指针,栈,reverse 1. 409. 最长回文串[✔]2. 125. 验证回文串[✔]3. ...

  • swift 实现 LeetCode

    swift实现链表 swift实现队列功能 swift实现栈的功能 判断给定的一组数是否是回文结构。如:1、2、3...

  • 回文数最优解

    回文数 非回文数 JAVA 解法

  • 234.回文链表

    题目 请判断一个链表是否为回文链表。 程序核心思想 栈结构 时间O(n) 空间O(n)把链表所有的节点入栈,然...

  • leecode刷题(31) -- 回文数

    leecode刷题(31) -- 回文数 回文数 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右...

  • 栈的特点:后进先出 abcdefghgfedcba,以h为中心,左右对称,称为“回文” 通过栈的方式进行回文校验 ...

  • 判断链表是否是回文结构

    题目: 思路1: 需要建立一个辅助栈,把链表入栈,如果链表从头节点开始和每次弹出的节点相同,说明是回文结构 代码一...

  • Leetcode(9) - 回文数 - java版

    Leetcode(9) - 回文数 - java版 题目 难度: 简单 判断一个整数是否是回文数。回文数是指正序...

网友评论

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

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