c语言数据结构题目求大神答案

2025-04-25 03:05:22
推荐回答(2个)
回答1:

//参考

#include

#define MaxSize 105

typedef struct hstack
{
    char  data[MaxSize];
    int  top;
}s_bracket;

int  main()
{
    char exps[MaxSize], tvalue;
    int i, sbn = 0;
    s_bracket sb;
    sb.top = 0;
    gets(exps);
    for (i = 0; exps[i] != '\0'; ++i){
        if (exps[i] == '(' || exps[i] == '{' || exps[i] == '['){
            sb.data[sb.top] = exps[i];
            sb.top++;
        }
        else if (exps[i] == ')' || exps[i] == '}' || exps[i] == ']'){
            if (sb.top == 0){
                break;
            }
            tvalue = sb.data[sb.top-1];
            if ((exps[i] == ')' && '(' == tvalue) || (exps[i] == '}' && '{' == tvalue) || (exps[i] == ']' && '[' == tvalue)){
                sbn++;
                sb.top--;
            }
        }
    }
    if (exps[i] == '\0' && sb.top == 0){
        printf ("匹配数:%d\n", sbn);
    }
    else {
        printf ("不匹配!\n");
    }
    return 0;
}

回答2:

#include 
#include 

const int MAXSIZE = 100;
typedef char SElemType;

typedef struct node {
SElemType data[MAXSIZE];
int top;
}*s_bracket;

int isFull(s_bracket S) { return S->top >= MAXSIZE; }
int isEmpty(s_bracket S) { return S->top == 0; }

int Push(s_bracket S,SElemType x) {
if(isFull(S)) return 0;
S->data[S->top++] = x;
return 1;
}

int Pop(s_bracket S,SElemType *x) {
if(isEmpty(S)) return 0;
*x = S->data[--S->top];
return 1;
}

int GetTop(s_bracket S,SElemType *x) {
if(isEmpty(S)) return 0;
*x = S->data[S->top - 1];
return 1;
}

int StackSize(s_bracket S) { return S->top; }

int main() {
s_bracket S = (s_bracket)malloc(sizeof(struct node));
char exp[MAXSIZE],bracket;
int i,matched;
printf("输入表达式:\n");
while(fgets(exp,MAXSIZE,stdin)) {
S->top = 0;
i = matched = 0;
while(exp[i]) {
if(exp[i] == '{' || exp[i] == '[' || exp[i] == '(')
Push(S,exp[i]);
if(exp[i] == '}') {
if(!isEmpty(S)) {
Pop(S,&bracket);
if(bracket == '{') ++matched;
}
}
if(exp[i] == ']') {
if(!isEmpty(S)) {
Pop(S,&bracket);
if(bracket == '[') ++matched;
}
}
if(exp[i] == ')') {
if(!isEmpty(S)) {
Pop(S,&bracket);
if(bracket == '(') ++matched;
}
}
++i;
}
printf("共匹配 %d 对。\n",matched);
printf("输入表达式( 结束):\n");
}
return 0;
}