beannaeb 发表于 2020-10-24 15:23:06

c语言 用栈判断字符串是否回文 新手求救!!

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{        ElemType data;
        int top;
}SqStack;

//初始化栈运算算法
void InitStack(SqStack &st)
{       
        st.top=-1;
}

//销毁栈运算算法
void DestroyStack(SqStack st)
{
}

//进栈运算算法
int Push(SqStack &st,ElemType x)
{        if(st.top==MaxSize-1)                        //栈满上溢出返回0
                return 0;
        else
        {        st.top++;
                st.data=x;
                return 1;                                        //成功进栈返回1
        }
}

//出栈运算算法
int Pop(SqStack &st,ElemType &x)         //x为引用型参数
{        if(st.top==-1)                                        //栈空返回0
                return 0;
        else
        {        x=st.data;
                st.top--;                                        //成功出栈返回1
                return 1;
        }
}

//取栈顶元素运算算法
int GetTop(SqStack st,ElemType &x)        //x为引用型参数
{        if(st.top==-1)                                        //栈空返回0
                return 0;
        else
        {        x=st.data;
                return 1;                                        //成功取栈项返回1
        }
}

//判断栈空运算算法
int StackEmpty(SqStack st)
{        if(st.top==-1)return 1;                        //栈空返回1
        else return 0;                                        //栈不空返回0
}

int Palindrome(char str[],int n)
{
        SqStack st;
        InitStack(st);
        int i;
        int ch;
        for(i=0;i<n;i++)
                Push(st,str);
        i=0;
        while(!StackEmpty(st))
        {
                Pop(st,ch);
                if(ch!=str)
                {
                        DestroyStack(st);
                        return 0;
               }
       }
        DestroyStack(st);
       return 1;
}
int main(){
        printf("输入一个字符串:\n");
        char str;
        int n;
        int flag;
        scanf("%d",&n);
        flag=Palindrome(str,n);
        if (flag)
    {
      printf("字符串是回文");
    }
    else
        {
                printf("字符串不是回文");
    }
    return 0;
}

程序可以运行但是结果有问题

巴巴鲁 发表于 2020-10-24 17:33:27

主函数那里有点问题
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{      ElemType data;
      int top;
}SqStack;

//初始化栈运算算法
void InitStack(SqStack &st)
{      
      st.top=-1;
}

//销毁栈运算算法
void DestroyStack(SqStack st)
{
}

//进栈运算算法
int Push(SqStack &st,ElemType x)
{      if(st.top==MaxSize-1)                        //栈满上溢出返回0
                return 0;
      else
      {      st.top++;
                st.data=x;
                return 1;                                        //成功进栈返回1
      }
}

//出栈运算算法
int Pop(SqStack &st,ElemType &x)         //x为引用型参数
{      if(st.top==-1)                                        //栈空返回0
                return 0;
      else
      {      x=st.data;
                st.top--;                                 //成功出栈返回1
                return 1;
      }
}

//取栈顶元素运算算法
int GetTop(SqStack st,ElemType &x)      //x为引用型参数
{      if(st.top==-1)                                        //栈空返回0
                return 0;
      else
      {      x=st.data;
                return 1;                                        //成功取栈项返回1
      }
}

//判断栈空运算算法
int StackEmpty(SqStack st)
{      if(st.top==-1)return 1;                        //栈空返回1
      else return 0;                                        //栈不空返回0
}

int Palindrome(char str[],int n)
{
         SqStack st;
         InitStack(st);
         int i;
         int ch;
         for(i=0;i<n;i++)
               Push(st,str);
         i=0;
         while(!StackEmpty(st))
         {
               Pop(st,ch);
               if(ch!=str)
               {
                         DestroyStack(st);
                         return 0;
               }
         }
      DestroyStack(st);
         return 1;
}
int main(){
      printf("输入一个字符串长度:\n");
      char str;
      int n;
      int flag;
      scanf("%d",&n);
      getchar();// 缓冲输入的回车符
      printf("输入%d个字符:\n",n);
      gets(str);
      flag=Palindrome(str,n);
      if (flag)
    {
      printf("字符串是回文");
    }
    else
      {
                printf("字符串不是回文");
    }
    return 0;
}
页: [1]
查看完整版本: c语言 用栈判断字符串是否回文 新手求救!!