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 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决