| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 469 人关注过本帖
标题:链式堆栈处理括号匹配问题
取消只看楼主 加入收藏
甜脆的故事
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2013-3-20
结帖率:100%
收藏
 问题点数:0 回复次数:2 
链式堆栈处理括号匹配问题
这个程序在我的 win 7上的vs6.0上无法通过编译 但是在我老师的linux服务器上能通过编译并且运行正确  那么请大家帮帮我看看 有啥问题
程序代码:
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
typedef char DataType;
#include"lsstack.h"
void compare(char s[MAX]);
int main()
{
    char s[MAX];
    scanf("%s",s);
    //printf("%s\n",s);
    compare(s);
    return 0;
}
void compare(char s[MAX])
{
    int n,i;
    char c;
    n=strlen(s);
    LSnode *Q;
    stackinitiate(&Q);
    for(i=0;i<n;i++)
    {
        if((s[i]=='(')||(s[i]=='{')||(s[i]=='['))
            stackpush(Q,s[i]);
        else if((s[i]==')')&&stacknotempty(Q)&&stacktop(Q,c)&&(c=='('))
            stackpop(Q,&c);
        else if((s[i]==')')&&stacknotempty(Q)&&stacktop(Q,c)&&(c!='('))
        {
            printf("左右括号匹配次序不对哦!\n");
            return;
        }
        else if((s[i]=='}')&&stacknotempty(Q)&&stacktop(Q,c)&&(c=='{'))
            stackpop(Q,&c);
        else if((s[i]=='}')&&stacknotempty(Q)&&stacktop(Q,c)&&(c!='{'))
        {
            printf("左右括号匹配次数不对哦!\n");
            return;
        }
        else if((s[i]==']')&&stacknotempty(Q)&&stacktop(Q,c)&&(c=='['))
            stackpop(Q,&c);
        else if((s[i]==']')&&stacknotempty(Q)&&stacktop(Q,c)&&(c!='['))
        {
            printf("左右括号匹配次数不对哦!\n");
            return;
        }
        else if(((s[i]==']')||(s[i]==')')||(s[i]=='}'))&&!stacknotempty(Q))
        {
            printf("右括号多于做括号!\n");
            return;
        }
    }
    if(stacknotempty(Q))
        printf("左括号多于右括号!\n");
    else
        printf("左右括号匹配正确!\n");
}




一下为头文件 名字为lsstack.h

程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef struct snode
{DataType data;

 struct snode *next;
}LSnode;

void stackinitiate(LSnode **H)
{if((*H=(LSnode*)malloc(sizeof(LSnode)))==NULL)exit(1);

 (*H)->next=NULL;
}

int stacknotempty(LSnode *H)
{if(H->next==NULL)return 0;

 else return 1;
}

int stackpush(LSnode *H,DataType x)
{LSnode *p;

 if((p=(LSnode*)malloc(sizeof(LSnode)))==NULL)
  {printf("no place\n");
   return 0; 

   }
p->data=x;
p->next=H->next;
H->next=p;
return 1;
}

int stackpop(LSnode *H,DataType *d)
{ LSnode *p=H->next;
if(p==NULL)

 {printf("stack is empty\n");
  return 0;
  }
H->next=p->next;
*d=p->data;
free(p);
return 1;
}

int stacktop(LSnode *H,DataType *d)
{LSnode *p=H->next;
if(p==NULL)

 {printf("stack is empty\n");
  return 0;
  }
*d=p->data;
return 1;
}

void conver(LSnode *H,DataType d)//进制转换
{
   

    while(d>0)
    {
       

        stackpush(H,d%2);
        d=d/2;
    }
   

}

搜索更多相关主题的帖子: 服务器 
2013-04-03 22:39
甜脆的故事
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2013-3-20
收藏
得分:0 
我知道错误啦  原来在c里面要把变量全部先定义好
所以改一下啊位置就好
程序代码:
int n,i;
    char c;
    n=strlen(s);
    LSnode *Q;
    stackinitiate(&Q);
改为
程序代码:
int n,i;
    char c;
    LSnode *Q;
    n=strlen(s);
   

    stackinitiate(&Q);

2013-04-03 23:17
甜脆的故事
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2013-3-20
收藏
得分:0 
而且上面的stacktop(Q,c) 要改为stacktop(Q,&c)
2013-04-03 23:24
快速回复:链式堆栈处理括号匹配问题
数据加载中...
 
   



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

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