使用栈实现回文判定C++

#include <iostream>
#include <cstring>

using namespace std;

typedef char elemType;
typedef struct stackNode {
    elemType data;
    struct stackNode *next;
} stackNode, *S;

bool initStack(S &s) {
    s = NULL;
    return true;
}

bool push(S &s, elemType e) {
    S p;
    p = new stackNode;
    if (!p) return false;
    p->data = e;
    p->next = s;
    s = p;
    return true;
}

bool pop(S &s, elemType &e) {
    if (!s) return false;
    S p;
    p = s;
    s = s->next;
    e = p->data;
    delete p;
    return false;
}

bool getTop(S s, elemType &e) {
    if (!s) return false;
    e = s->data;
    return true;
}

bool isEmpty(S s) {
    if (!s) return true;
    else return false;
}

bool palindrome(char *str) {
    S s;
    int len, i;
    char e;
    len = strlen(str) / 2;
    initStack(s);
    for (i = 0; i < len; i++) {
        push(s, str[i]);
    }
    if (len % 2 == 1) i++;
    while (!isEmpty(s)) {
        pop(s, e);
        if (e != str[i]) return false;
        else i++;
    }
    return true;
}

int main() {
    char str[]{"aecbcea"};
    if (palindrome(str)) cout << "It's palindrome!" << endl;
    return 0;
}

Output:

It's palindrome!
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容