admin 管理员组

文章数量: 1087649

栈实现回文字符串判断

回文判断:正读和反读都相同的字符序列称为回文。
从回文的定义可以看出,回文字符串的正序和逆序输出结果是相同的,算法需要做的就是将字符串串进行进栈然后出栈操作,将其与正序字符串进行比较,相同则为回文。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>//以下是自己写的关于链式栈的基本操作,之后在进行回文字符串的判断#define OK 1
#define ERROR 0typedef char ElemType;
typedef int Status;typedef struct LNode    //栈元素节点
{ElemType data;    //数据struct LNode* next;    //指向下一个节点
}LNode, * LinkStack;Status InitStack(LinkStack& S)    //链式栈初始化
{S = (LNode*)malloc(sizeof(LNode));if (S == NULL) exit(0);S->next = NULL;return OK;
}Status DestroyStack(LinkStack& S)    //链式栈销毁
{LNode* p = S;LNode* q = p;while (p){q = p;p = p->next;free(q);}free(q);return OK;
}Status ClearStack(LinkStack& S)    //链式栈清空
{if (S->next == NULL) return OK;LNode* p = S->next;LNode* q;while (p){q = p;p = p->next;free(q);}S->next = NULL;return OK;
}Status StackEmpty(LinkStack S)    //链式栈判空
{if (S->next == NULL) return OK;return ERROR;
}Status StackLength(LinkStack S)    //链式栈元素个数
{LNode* p = S;int i = 0;while (p->next){i++;p = p->next;}return i;
}Status GetTop(LinkStack S, ElemType& e)    //链式栈获取栈顶元素
{if (S->next == NULL) return ERROR;e = S->next->data;return OK;
}Status StackTraverse(LinkStack S)    //链式栈遍历
{if (S->next == NULL) return ERROR;LNode* p = S->next;while (p){printf("%d ", p->data);p = p->next;}printf("\n");return OK;
}Status Push(LinkStack& S, ElemType e)    //链式栈进栈
{LNode* p = (LNode*)malloc(sizeof(LNode));if (p == NULL) exit(0);p->data = e;p->next = S->next;S->next = p;return OK;
}Status Pop(LinkStack& S, ElemType& e)    //链式栈出栈
{if (S->next == NULL) return ERROR;e = S->next->data;LNode* p = S->next;S->next = p->next;free(p);return OK;
}Status CheckPalindrome(char* str)    //回文字符串的判断算法
{//检查str字符串是否回文,是回文返回OK,不是回文返回ERRORLinkStack S;InitStack(S);int str_len = strlen(str);//将字符逐个压栈for (int i = 0; i < str_len; i++){Push(S, str[i]);}ElemType e;//从栈中逐个弹出字符并将其与字符串的正序进行比较for (int i = 0; i < str_len; i++){Pop(S, e);if (e != str[i]) return ERROR;    //不是回文}DestroyStack(S);return OK;
}int main()
{char str[100];printf("输入字符串:");gets(str); if (CheckPalindrome(str) == 1)printf("是回文字符串\n");elseprintf("不是回文字符串\n");return 0;
}

运行结果如下:

本文标签: 栈实现回文字符串判断