awfkapjfak 2022-04-22 12:49 采纳率: 68.8%
浏览 41
已结题

数据结构 栈的应用之判断回文数

问题遇到的现象和发生背景

代码问题

问题相关代码,请勿粘贴截图

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define MAXSIZE 50
#define SIZE 100

typedef char datatype;
typedef struct{
datatype a[MAXSIZE];
int top;
}sequence_stack;

//
/* 函数功能:栈(顺序存储)初始化 /
/
函数参数:指向sequence_stack型变量的指针变量st /
/
函数返回值:空 */
/
/
void init(sequence_stack *st)
{
st->top=0;
}

//
/* 函数功能:判断栈(顺序存储)是否为空 /
/
函数参数:sequence_stack型变量st /
/
函数返回值:int类型。1表示空,0表示非空 */
/
/
int empty(sequence_stack st)
{
return(st.top? 0:1);
}

//
/* 函数功能:读栈顶(顺序存储)结点值 /
/
函数参数:sequence_stack型变量st /
/
函数返回值:datatype类型。返回栈顶结点值 */
/
/
datatype read(sequence_stack st)
{
if (empty(st))
{printf("\n栈是空的!");exit(1);}
else
return st.a[st.top-1];
}

//
/* 函数功能:栈(顺序存储)的插入(进栈)操作 /
/
函数参数:指向sequence_stack型变量的指针变量st /
/
datatype型变量x /
/
函数返回值:空 */
/
/
void push(sequence_stack *st,datatype x)
{
if(st->top==MAXSIZE)
{printf("\nThe sequence stack is full!");exit(1);}
st->a[st->top]=x;
st->top++;
}

//
/* 函数功能:栈(顺序存储)的删除(出栈)操作 /
/
函数参数:指向sequence_stack型变量的指针变量st /
/
函数返回值:空 */
/
/
datatype pop(sequence_stack *st)
{
datatype x;
if(st->top==0)
{printf("\nThe sequence stack is empty!");exit(1);}
x=st->a[st->top-1];
st->top--;
return x;
}

//
/
函数功能:判断一个字符串是不是回文串操作 /
/
函数参数:已知字符串 /
/
函数返回值:int类型,返回一个整数用于判断是不是回文串
/
/
**/
int Is_Pstring(sequence_stack *st,char str[])
//待补充
int main()
{
char str[SIZE];
sequence_stack s;
init(&s);
scanf("%s",str);
if(Is_Pstring(&s,str))
printf("是回文串");
else
printf("不是回文串");
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

待补充的地方应该填什么呀

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-04-22 14:52
    关注

    供参考:

    #include "stdio.h"
    #include "string.h"
    #include "stdlib.h"
    #define MAXSIZE 50
    #define SIZE 100
    
    typedef char datatype;
    typedef struct {
        datatype a[MAXSIZE];
        int top;
    }sequence_stack;
    
    //
    // 函数功能:栈(顺序存储)初始化 /
    //函数参数:指向sequence_stack型变量的指针变量st/
    //函数返回值:空 */
    //
    void init(sequence_stack* st)
    {
        st->top = 0;
    }
    
    //
    // 函数功能:判断栈(顺序存储)是否为空 /
    //函数参数:sequence_stack型变量st/
    //函数返回值:int类型。1表示空,0表示非空 */
    //
    int empty(sequence_stack st)
    {
        return(st.top ? 0 : 1);
    }
    
    //
    // 函数功能:读栈顶(顺序存储)结点值 /
    //函数参数:sequence_stack型变量st/
    //函数返回值:datatype类型。返回栈顶结点值 */
    //
    datatype read(sequence_stack st)
    {
        if (empty(st))
        {
            printf("\n栈是空的!");
            exit(1);
        }
        else
            return st.a[st.top - 1];
    }
    
    //
    // 函数功能:栈(顺序存储)的插入(进栈)操作 /
    //函数参数:指向sequence_stack型变量的指针变量st/
    //datatype型变量x/
    //函数返回值:空 */
    //
    void push(sequence_stack* st, datatype x)
    {
        if (st->top == MAXSIZE)
        {
            printf("\nThe sequence stack is full!");
            exit(1);
        }
        st->a[st->top] = x;
        st->top++;
    }
    
    //
    // 函数功能:栈(顺序存储)的删除(出栈)操作 /
    //函数参数:指向sequence_stack型变量的指针变量st/
    //函数返回值:空 */
    //
    datatype pop(sequence_stack* st)
    {
        datatype x;
        if (st->top == 0)
        {
            printf("\nThe sequence stack is empty!");
            exit(1);
        }
        x = st->a[st->top - 1];
        st->top--;
        return x;
    }
    
    //
    //函数功能:判断一个字符串是不是回文串操作/
    //函数参数:已知字符串/
    //函数返回值:int类型,返回一个整数用于判断是不是回文串 /
    //待补充
    int Is_Pstring(sequence_stack* st, char str[])
    {
        char c;
        int i, len = strlen(str);
        for (i = 0; i < len; i++)
            push(st, str[i]);
        i = 0;
        while (!empty(*st)) {
            c = pop(st);
            if (c != str[i])
                return 0;
            i++;
        }
        if (empty(*st))
            return 1;
    }
    
    int main()
    {
        char str[SIZE];
        sequence_stack s;
        init(&s);
        scanf("%s", str);
        if (Is_Pstring(&s, str))
            printf("是回文串");
        else
            printf("不是回文串");
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 已采纳回答 4月23日
  • 创建了问题 4月22日

悬赏问题

  • ¥15 QTOF MSE数据分析
  • ¥15 平板录音机录音问题解决
  • ¥15 请问维特智能的安卓APP在手机上存储传感器数据后,如何找到它的存储路径?
  • ¥15 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用
  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚