meredith_2000 2019-10-14 23:53 采纳率: 0%
浏览 179

求助!C语言栈数据结构关于栈的问题

为什么我写的顺序栈显示null?
图片说明

#include <stdio.h>

#define MAXSIZE 20

typedef struct {
    char c[MAXSIZE];
    int top;
}SeqStack;

int initSeqStack(SeqStack *ss){
    ss->top = -1;
    return 0;
}

int destorySeqStackA(SeqStack *ss){
    while (ss->c[ss->top] != '(') {
        ss->c[ss->top] = 'N';
        ss->top--;
    }
    if (ss->c[ss->top] == '{') {
        ss->c[ss->top] = 'N';
        ss->top--;
    }
    if (ss->top == -2) {
        return 0;
    }
    return 1;
}

int destorySeqStackB(SeqStack *ss){
    while (ss->c[ss->top] != '[') {
        ss->c[ss->top] = 'N';
        ss->top--;
    }
    if (ss->c[ss->top] == '[') {
        ss->c[ss->top] = 'N';
        ss->top--;
    }
    if (ss->top == -2) {
        return 0;
    }
    return -1;
}

int destorySeqStackC(SeqStack *ss){
    while (ss->c[ss->top] != '{') {
        ss->c[ss->top] = 'N';
        ss->top--;
    }
    if (ss->c[ss->top] == '{') {
        ss->c[ss->top] = 'N';
        ss->top--;
    }
    if (ss->top == -2) {
        return 0;
    }
    return -1;
}

int push(SeqStack *ss, char *str, int i){
    ss->top++;
    ss->c[ss->top] = str[i];
    return 0;
}

int bracketmatch(char *str) {
    SeqStack *ss;
    initSeqStack(ss);
    int i = 0;
    while (str[i] != '\0') {
        push(ss, str, i);
        if (str[i] == ')') {
            destorySeqStackA(ss);
        }
        if (str[i] == ']') {
            destorySeqStackB(ss);
        }
        if (str[i] == '}') {
            destorySeqStackC(ss);
        }
        if (destorySeqStackA(ss) == 0 || destorySeqStackB(ss) == 0 || destorySeqStackC(ss) == 0) {
            return 0;
        }
    }
    return 1;
}

int main(int argc, char* argv[])
{
    char *str="(1+5)*6 + ({3-5 + [5*9] +4}-6)";
    char *str1="(1+5)*6 + ({3-5 + [5*9] +4}-6)}";
    if(bracketmatch(str))
        printf("str bracket match OK!\n");
    else
        printf("str bracket match ERROR!\n");

    if(bracketmatch(str1))
        printf("str1 bracket match OK!\n");
    else
        printf("str1 bracket match ERROR!\n");

    return 0;
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 16:18
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)