| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
雷速体育发帖软件开发QQ118000023C语言培训|一对一辅导|零基础学编程LightningChart 快速先进的.Net图表控件
共有 1125 人关注过本帖
标题:新手发个括号匹配栈程序
只看楼主 收藏
ehszt
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:34
帖 子:1633
专家分:2989
注 册: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: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:长长久久
等 级:版主
威 望:44
帖 子:4898
专家分:13909
注 册:2016-10-22
  得分:20 
我也是数据结构刚起步~

[code]/*~个性签名:弟弟的妹妹叫妹妹,弟弟的姐姐叫姐姐~ 2018-06-18更~*/[/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.039812 second(s), 9 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved