鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[技术交流] 括号匹配(栈的应用)

  [复制链接]
发表于 2020-2-27 11:35:46 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-9 16:02:43 | 显示全部楼层
如果括号里有其他内容该怎么解,就像有些笔试题把括号当成包装盒,把括号里面的内容当成礼物,然后判断盒子里有没有礼物
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 13:49:31 | 显示全部楼层
可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-12 16:49:11 | 显示全部楼层
支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-24 22:34:08 | 显示全部楼层
嗯嗯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-8 19:02:43 | 显示全部楼层
用于学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 19:04:50 | 显示全部楼层
用于学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-14 13:20:58 | 显示全部楼层
我要看代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-7 08:17:49 | 显示全部楼层
bangbangbang
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-1 22:46:19 | 显示全部楼层
请问代码是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-7 18:15:25 | 显示全部楼层
看一哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-18 09:54:08 | 显示全部楼层

比较比较   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-11 12:05:13 | 显示全部楼层
有点东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-15 19:49:11 | 显示全部楼层
啊这
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-16 00:04:41 | 显示全部楼层
感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-18 03:41:32 | 显示全部楼层
来看看源代码!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-22 02:02:00 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
#define stack_init_size 40
typedef struct stack
{
        char* base;
        char* top;
        int stacksize;
}sqstack;
void initstack(sqstack* s)
{
        s->base = (char*)malloc(stack_init_size * sizeof(sqstack));
        if (!s->base)exit(0);
        s->top = s->base;
        s->stacksize = stack_init_size;
}
void push(sqstack* s, char e)
{
        if (!s->base)exit(0);
        s->top = s->base + s->stacksize;
        s->stacksize += 10;
        *s->top++ = e;
}
void  pop(sqstack*s, char* e)
{
        if (s->top == s->base) return 0;
        e = *--s->top;
}

int main()
{
        int* base;
        int* top;
        int stacksize;
        sqstack s;
        initstack(&s);
        char e = {0};
        int count = 0;
        printf("input:");
        scanf_s("%c", &e,1);
        if (e != '\n' || e !=')' || e != ']' || e != '}')//第一个字符的判断
        {
                push(&s, e);
        }
        else return 0;
        while (e != '\n')
        {
                scanf_s("%c", &e, 1);
                char* p;
                p = s.top - 1;
                switch (e)
                {
                case')':
                        if (*p == '[' || *p == '}')
                        {
                                printf("0");
                        }
                        break;

                        if (*(p - 1) == '(')
                        {
                                pop(&s, &e);
                        }
                        continue;



                        case']':
                                if (*p == '(' || *p == '}')
                                {
                                        printf("0");
                                }
                                break;

                                if (*(p - 1) == '[')
                                {
                                        pop(&s, &e);
                                }

                                continue;


                        case'}':
                                if (*p == '(' || *p == '[')
                                {
                                        printf("0");
                                }
                                break;
                                        if (*(p - 1) == '{')
                                        {
                                                pop(&s, &e);
                                        }
                                        continue;
                       
                        case '(':
                                push(&s, &e);
                                continue;

                        case '[':
                                push(&s, &e);
                                continue;

                        case '{':
                                push(&s, e);
                                continue;
                }
        }
        if (s.top == s.base)
                printf("1");
        else
                printf("0");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-23 08:14:28 | 显示全部楼层
#include <stdio.h>
#include <stdlib.h>
typedef int Status;
typedef int Elemtype;
#define ERROR 0
#define OK 1
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define x 20
typedef struct {
        Elemtype *top;
        Elemtype *base;
        int stacksize;
}Stack;
Stack S;
Status Initstack(Stack S)
{
        if(S.base==0)
                return 0;
        S.base=(Elemtype*)malloc(STACK_INIT_SIZE*sizeof(Elemtype));
        S.top=S.base;
        S.stacksize=STACK_INIT_SIZE;
        return 1;
}
Status Pushstack(Stack &S,Elemtype &e)
{
        if(S.base==S.top)
                return 0;
        if(S.top-S.base==S.stacksize)
        {
       
                S.base=(Elemtype*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(Elemtype));
                S.top=S.base+S.stacksize;
                S.stacksize=S.stacksize+STACKINCREMENT;
               
        }
        *S.top=e;
        S.top++;
        return 1;
}
Status Popstack(Stack &S,Elemtype e)
{
        if(S.base==S.top)
                return 0;
        e=*S.top;
        S.top--;
        return 1;
}
int matchstack(char *p)
{
        Elemtype e;
       
        while(*p!=0)
        {
                if(*p=='('||*p=='[')
                {
                        Pushstack(S,e);
                       
                }
                *(p++);
                if(*p==')'||*p==']')
                {
                        Popstack(S,e);       
                }
                *(p++);       
        }
        if(S.base>S.top)
                return 0;
        else
                return 1;
}
int main()
{
        char c[x];
        gets(c);
        if(matchstack(c)==1)
                printf("成功\n");
        else
                printf("失败\n");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-25 00:21:35 | 显示全部楼层
感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-25 10:07:15 | 显示全部楼层
nb
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-4 01:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表