admin 管理员组文章数量: 1087652
栈实现回文字符串判断
回文判断:正读和反读都相同的字符序列称为回文。
从回文的定义可以看出,回文字符串的正序和逆序输出结果是相同的,算法需要做的就是将字符串串进行进栈然后出栈操作,将其与正序字符串进行比较,相同则为回文。
#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;
}
运行结果如下:
本文标签: 栈实现回文字符串判断
版权声明:本文标题:栈实现回文字符串判断 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1700299510a386217.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论