#define SIZE_MAX 100
typedef struct
{
char items[SIZE_MAX];
int top;
}Stack;
//初始化
void Stackinit(Stack* s)
{
s->top = -1;
}
//检查是否栈满
bool isFull(Stack* s)
{
return s->top == SIZE_MAX - 1;
}
//检查是否栈空
bool isEmpty(Stack* s)
{
return s->top == -1;
}
//入栈
void PushStack(Stack* s, char item)
{
//判断是否满
if ((isFull(&s)))
{
printf("栈满,无法入栈\n");
return;
}
s->items[++s->top] = item;
}
//出栈
char PopStack(Stack* s)
{
//判断是否空栈
if (isEmpty(&s))
{
printf("栈空,无内容可以输出\n");
return -1;
}
return s->items[s->top--];
}
//检查是否回文
bool isPalindrome(char* str)
{
int len = strlen(str);
Stack s;
//初始化
Stackinit(&s);
//将字符串前一半入栈
for (int i = 0; i < len / 2; i++)
{
PushStack(&s, str[i]);
}
// 检查栈中的字符是否与字符串的另一半字符相同
if (len%2!=0)//奇数的
{
for (int i = len / 2+1; i < len; i++)
{
//出栈元素
char c = PopStack(&s);
if (c != str[i])
{
return false;
}
}
}
else {
for (int i = len / 2; i < len; i++)
{
//出栈元素
char c = PopStack(&s);
if (c != str[i])
{
return false;
}
}
}
return true;
}
int main()
{
char str[] = "abdba";
if (isPalindrome(str))
{
printf("是回文\n");
}
else {
printf("不是回文\n");
}
return 0;
}
回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文;(数据结构C语言版-栈方法)
最新推荐文章于 2024-11-04 13:52:23 发布