| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1392 人关注过本帖
标题:数据结构作业(c语言版的)
只看楼主 加入收藏
ljy0662
Rank: 2
等 级:论坛游民
帖 子:27
专家分:15
注 册:2009-3-2
收藏
 问题点数:0 回复次数:8 
数据结构作业(c语言版的)
设计一个算法,判断一个表达式中符号“(”与“)”,“{”与“}”,“[”与“]”是否匹配。若匹配,则返回1:否则返回0.
搜索更多相关主题的帖子: c语言 作业 数据结构 
2009-11-23 21:33
ljy0662
Rank: 2
等 级:论坛游民
帖 子:27
专家分:15
注 册:2009-3-2
收藏
得分:0 
,高手请给一个QQ我,便于我以后学习数据结构!!
2009-11-23 21:42
ljy0662
Rank: 2
等 级:论坛游民
帖 子:27
专家分:15
注 册:2009-3-2
收藏
得分:0 
#include<stdio.h>
#define sta 10

void main()
{
typedef struct
{
   char data[sta];
  int top;
}stract;

 stract sq;
    int i=0,sq=0;
    int j=0,x=0;
    char b[3],e[3];
    char a[30];
    gets(a);
    b[3]={'(','[','{'};
for(i=0;i<30;i++)
{for(j=0;j<3;j++)

{if(b[j]==a[i])
sq.top++;
sq.data[sq.top]=a[i];}
 if(sq.data[sq.top]==a[i])
     e[x]=sq.data[sq.top];
     x++;
     sq.top--;}
if(sq.data[sq.top]==-1)
printf("1");
else
printf("0");



这里有错啊!!不知道哪里有错啊!!高手帮帮忙啊!


2009-11-23 22:06
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
收藏
得分:0 
用三个堆栈实现,遇到左括号就进栈,右括号就出栈,如果扫描完字符串后,堆栈是空的,那么就是匹配的,否则不匹配。
2009-11-24 08:34
ljy0662
Rank: 2
等 级:论坛游民
帖 子:27
专家分:15
注 册:2009-3-2
收藏
得分:0 
回复 4楼 geninsf009
版主,我知道思路就是这样的,但是呢!我自己在上面写了一段代码啊,但是调试的时候出错了啊!
2009-11-24 19:44
wufei1989121
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:113
注 册:2009-11-13
收藏
得分:0 
for(i=0;i<30;i++)
for(j=0;j<3;j++)
应该换过来
我想用不着定义结构体   用一个一维数组让它具有栈的特点就是栈了
2009-12-23 14:42
混沌之灵
Rank: 2
等 级:论坛游民
帖 子:31
专家分:18
注 册:2008-12-19
收藏
得分:0 
// 括号匹配检测.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

//括号匹配检测算法一:匹配返回1,不匹配返回0
int correct(char exp[],int n)
{     char st[255];    //为简单,我们这里定义静态栈
           int top=-1,i=0,tag=1;   //tag==0,表示不匹配
           while (i<n && tag)
           {      if (exp[i]=='(' || exp[i]=='[' || exp[i]=='{')
               /*遇到'('、'['或'{',则将其入栈*/
                {
                      top++;
                      st[top]=exp[i];
                 }
                 if (exp[i]==')')   /*遇到')',若栈顶是'(',则继
        续处 理,否则以不配对返回*/
                 if (st[top] == '(') top--;
                 else tag=0;
           if (exp[i]==']')   /*遇到']',若栈顶是'[', 则继续处
                                    理,否则以不配对返回*/
                 if (st[top]=='[')  top--;
                 else tag=0;
           if (exp[i]=='}')  /*遇到'}',若栈顶是 '{',则继续处
                                    理,否则以不配对返回*/
                 if (st[top]=='{')  top--;
                 else tag=0;
           i++;
      }      /*表达式扫描完毕*/
      if (top>-1)
            tag=0;    /*若栈不空,则不配对*/
      return(tag);
 }

int main(int argc, char* argv[])
{
    char exp[255],*p;
    int  len;
    int  result;
    printf("请输入带括号表达式:\n");
    scanf("%s",exp);

    len=0;
    p=exp;
    while (*p!=0)
    {
        len++;
        p++;
    }
 
    result=correct(exp,len);
    if (result==1)
        printf("\n括号匹配。\n");
    else printf("\n括号不匹配!\n");
    return 0;
}

2009-12-27 00:51
混沌之灵
Rank: 2
等 级:论坛游民
帖 子:31
专家分:18
注 册:2008-12-19
收藏
得分:0 
回复 3楼 ljy0662
楼主比较一下吧

2009-12-27 00:52
混沌之灵
Rank: 2
等 级:论坛游民
帖 子:31
专家分:18
注 册:2008-12-19
收藏
得分:0 
下面这个是用栈的方法

// 用教材栈定义的检测算法.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <process.h>
#include <malloc.h>
#include <math.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0

typedef int Status;

//栈的顺序存储表示
typedef char SElemType; // 定义栈元素类型为_____字符(用来处理表达式)

#define STACK_INIT_SIZE 10 // 存储空间初始分配量
#define STACK_INCREMENT 2 // 存储空间分配增量
typedef struct SqStack{
   SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
   SElemType *top; // 栈顶指针
   int stacksize; // 当前已分配的存储空间,以元素为单位
}SqStack; // 顺序栈


//顺序栈的有关基本操作
void InitStack(SqStack &S)
{ // 构造一个空栈S
   if(!(S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType))))
     exit(OVERFLOW); // 存储分配失败
   S.top=S.base;
   S.stacksize=STACK_INIT_SIZE;
}

Status StackEmpty(SqStack S)
{ // 若栈S为空栈,则返回TRUE,否则返回FALSE
   if(S.top==S.base)
     return TRUE;
   else
     return FALSE;
}

void Push(SqStack &S,SElemType e)
{ // 插入元素e为新的栈顶元素
   if(S.top-S.base>=S.stacksize) // 栈满,追加存储空间
   {
     S.base=(SElemType *)realloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(SElemType));
     if(!S.base)
       exit(OVERFLOW); // 存储分配失败
     S.top=S.base+S.stacksize;
     S.stacksize+=STACK_INCREMENT;
   }
   *(S.top)++=e;
}

Status Pop(SqStack &S,SElemType &e)
{ // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
   if(S.top==S.base)
     return ERROR;
   e=*--S.top;
   return OK;
}

//括号检测函数
void check()
{ // 对于输入的任意一个字符串,检验括号是否配对
   SqStack s;
   SElemType ch[80],*p,e;
   InitStack(s); // 初始化栈
   printf("请输入带括号(()、[]和{})的表达式\n");
   scanf("%s",ch);

   p=ch; // p指向字符串的首字符
   while(*p) // 没到串尾
     switch(*p)
     {
       case '(':
       case '[':
       case '{':Push(s,*p++); // 左括号入栈,且p++
                break;
       case ')':
       case ']':
       case '}':if(!StackEmpty(s)) // 栈不空
                {
                  Pop(s,e); // 弹出栈顶元素
                  if(!(e=='('&&*p==')'||e=='['&&*p==']'||e=='{'&&*p=='}'))
                  { // 出现3种匹配情况之外的情况
                    printf("左右括号不配对\n");
                    exit(ERROR);
                  }
                }
                else // 栈空
                {
                  printf("缺乏左括号\n");
                  exit(ERROR);
                }
       default: p++; // 其它字符不处理,指针向后移
     }
   if(StackEmpty(s)) // 字符串结束时栈空
     printf("括号匹配\n");
   else
     printf("缺乏右括号\n");
}

int main(int argc, char* argv[])
{
    check();
    printf("\n");
    return 0;
}
2009-12-27 00:54
快速回复:数据结构作业(c语言版的)
数据加载中...
 
   



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

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