1,设计一个算法利用顺序栈的基本运算判断一个字符串是否是回文
解题思路:
由于回文是从前到后和从后到前读都是一样的,所以只要将待判断的字符串颠倒
然后与原字符串相比较,就可以决定是否是回文了
#include<stdio.h> #include<stdlib.h> #define MaxSize 100 //顺序栈的初始分配大小 typedef struct SqStack { char data[MaxSize];//保存栈中元素 int top;//栈中指针 }SqStack; //声明初始化方法 void initStack(SqStack &st); //声明压栈方法 int Push(SqStack &st, char x); //声明出栈方法 int Pop(SqStack &st, char &x); //判断是否为空 int StackEmpty(SqStack st); //声明判断是否是回文的方法 int isPalindrome(char str[]); int main() { char str[] = "abcdcba"; printf("是否是回文?1(是):0(不是)= %d ", isPalindrome(str)); return 0; } //实现方法 //初始化 void initStack(SqStack &st) {//st为引用型参数 st.top = -1; } //压栈 int Push(SqStack &st, char x) { if (st.top==MaxSize-1) {//栈满,上溢出,返回0 return 0; } else { st.top++; st.data[st.top] = x; return 1;//成功进栈返回1 } } //出栈 int Pop(SqStack &st, char &x) { //x为引用型参数 if (st.top == -1) { return 0; } else { x = st.data[st.top]; st.top--; return 1;//成功出栈返回1 } } //判断是否为空 int StackEmpty(SqStack st) { if (st.top == -1)return 1; else return 0; } //判定一个给定字符串str是否是回文,是返回1 不是返回0 int isPalindrome(char str[]) { SqStack st;//定义一个顺序栈st initStack(st);//栈初始化 int i = 0; char ch; while ((ch=str[i++])!='