| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2247 人关注过本帖
标题:新手发个括号匹配栈程序
只看楼主 加入收藏
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
新手发个括号匹配栈程序
各位好,本人正在学数据结构,发个自己刚打的代码
#define OK 1
#define SElemType char
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW 0
#define ERROR 0
#define TRUE 1;
#define FALSE 0;
#include <stdio.h>
#include <stdlib.h>
char map[7]={'(',')','[',']','{','}'};
typedef bool Status;

typedef struct{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;

Status StackEmpty(SqStack S)
{
    if(S.top==S.base)return TRUE;
    return FALSE;
}

Status DestroyStack(SqStack &S)
{
    SElemType *temp;
    while(S.top!=S.base)
    {
        temp=S.top;
        free(temp);
        S.top--;
    }
    free(S.top);
    S.stacksize=0;
    return TRUE;
}

Status ClearStack(SqStack &S)
{
    SElemType *temp;
    while(S.top!=S.base)
    {
        *S.top--=0;
    }
    *S.top=0;
    return TRUE;
}

Status GetTop(SqStack S,SElemType &e)
{
    if(S.top==S.base)return ERROR;
    e=*(S.top-1);
    return OK;
}

Status InitStack(SqStack &S)
{
    S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    if(!S.base)exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
    return OK;
}

Status Push(SqStack &S,SElemType e)
{
    if(S.top-S.base>=S.stacksize)
    {
        S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
        if(!S.base)exit(OVERFLOW);
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }
    *S.top++=e;
    return OK;
}

Status Pop(SqStack &S,SElemType &e)
{
    if(S.top==S.base)return ERROR;
    e=*--S.top;
    return OK;
}

main()
{
    char e,ch,flag;
    char a[200],i=0;
    SqStack S;
    InitStack(S);
    while((e=getchar())!='\n')
    {
        a[i++]=e;
        flag=0;
        for(int j=0;j<6;j++)
        {
            if(map[j]==e)
            {
                flag=1;
                break;
            }
        }
        GetTop(S,ch);
        if(ch!=(e-2)&&ch!=(e-1)&&flag)
        Push(S,e);
        else if((ch==(e-2)||ch==(e-1))&&flag)
        Pop(S,ch);
    }
    putchar('\n');
    for(int j=0;j<i;j++)
    {
        putchar(a[j]);
    }
    if(StackEmpty(S))puts("\n括号匹配!");
    else puts("\n括号不匹配!");
}

[此贴子已经被作者于2017-3-14 15:45编辑过]

搜索更多相关主题的帖子: return include 
2017-03-14 15:41
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:20 
我也是数据结构刚起步~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-19 08:46
Hzou
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-7
收藏
得分:0 
起步+1
2017-11-07 21:48
快速回复:新手发个括号匹配栈程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017755 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved