[PTA][C语言]使用栈完成回文判断

Posted Billy Miracle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PTA][C语言]使用栈完成回文判断相关的知识,希望对你有一定的参考价值。

回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符串是否为回文。

函数接口定义:

int IsPalindrome(char s[]);  //判断字符串s是否回文。

其中 s 是用户传入的参数,其值为待判断字符串。如果s 是回文,则返回值为1,否则返回值为0。

特别说明:本题要求使用栈的基本操作完成回文的判断。 栈的定义如下:

#define Stack_Size 50
typedef char ElemType;
typedef struct
{      ElemType  data[Stack_Size]; 
       int  top; 
}SeqStack;

//栈的基本操作函数定义
SeqStack* InitStack();  //栈初始化
int IsEmpty(SeqStack *S); //栈判空
int IsFull(SeqStack *S);  //栈判满
int Push(SeqStack * S, ElemType x);  //  入栈
int Pop(SeqStack * S, ElemType *x);  //  出栈
int GetTop(SeqStack *S, ElemType *x); // 取栈顶元素

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TRUE 1
#define FALSE 0

#define Stack_Size 50
typedef char ElemType;
typedef struct
{      ElemType  data[Stack_Size]; 
       int  top; 
}SeqStack;

//栈的基本操作函数定义
SeqStack* InitStack();  //栈初始化
int IsEmpty(SeqStack *S); //栈判空
int IsFull(SeqStack *S);  //栈判满
int Push(SeqStack * S, ElemType x);  //  入栈
int Pop(SeqStack * S, ElemType *x);  //  出栈
int GetTop(SeqStack *S, ElemType *x); // 取栈顶元素


int IsPalindrome(char s[]);  //判断字符串s是否回文。

main()
{
    char s[20];
    scanf("%s",s);
    if(IsPalindrome(s))
        printf("It's Palidrome!\\n"); 
    else
        printf("It's not Palidrome!\\n");
}


SeqStack* InitStack()
{
    SeqStack *s;
    s=(SeqStack *)malloc(sizeof(SeqStack));
    s->top=-1;
    return s;
}
int IsEmpty(SeqStack *S)     
{
      return(S->top==-1?TRUE:FALSE);
}
int IsFull(SeqStack *S)
{
   return(S->top== Stack_Size-1?TRUE:FALSE);
}
int Push(SeqStack * S, ElemType x)
{
     if(S->top== Stack_Size-1)  
         return(FALSE); 
     S->top++;
     S->data[S->top]=x;
     return(TRUE);
}
int Pop(SeqStack * S, ElemType *x)
{     if(S->top==-1)     
             return(FALSE);
      *x= S->data[S->top];
      S->top--;    
      return(TRUE);
}
int GetTop(SeqStack *S, ElemType *x)
{  
      if(S->top==-1)
            return(FALSE);
      *x = S->data[S->top];
      return(TRUE);
}

/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

abba
//结尾无空行

输出样例:

在这里给出相应的输出。例如:

It's Palidrome!

Answer:

int IsPalindrome(char s[]) {
    SeqStack* stack = InitStack();
    stack->top = 0;
    int stringLength = strlen(s);
    for ( ; stack->top < stringLength / 2 && !IsFull(stack); ++stack->top) {
       stack->data[stack->top] = s[stack->top];
    }
    stack->top--;
    for (int p = (stringLength - 1) / 2 + 1; p < stringLength; ++p) {
        if (stack->data[stack->top] == s[p]) {
            stack->top--;
        } else {
            break;
        }
    }
    if (stack->top == -1) {
        return 1;
    } else {
        return 0;
    }
}

以上是关于[PTA][C语言]使用栈完成回文判断的主要内容,如果未能解决你的问题,请参考以下文章

判断字符串是否为回文(C语言 顺序栈)

C语言:判断一个数是不是为回文数,要求如下:

[PTA]习题8-8 判断回文字符串

C语言怎么判断一个数是不是是回文数?

c语言 指定范围内的回文素数,题目如下,要求1S内完成的

c语言如何求回文数