数据结构实习——重言式的判别(写的不好不要见怪)

这个博客介绍了一种使用数据结构(如二叉树和堆栈)来识别和评估逻辑表达式的方法。通过建立逻辑运算符和变量的二叉树,结合堆栈操作,实现了对重言式、矛盾式和非重言非矛盾式的判断,并提供了用户输入变量取值的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdlib.h>
#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<math.h>

#define stack_size_normal 100
#define bianliang_max 20
#define str_max 60

int zuhe[bianliang_max];//变量的取值组合数组定义;
int N;//变量个数;

//根据表达式建立的二叉树的结点定义;
typedef struct btdnode{
 char data;
 struct btdnode *lchild;
 struct btdnode  *rchild;
}*bitree;

//识别表达式使用的堆栈定义,它存放的都是树的结构;
typedef struct lnode_optr{     
 struct btdnode **base;    //栈中的元素都是树的结点结构;
 struct btdnode **top;
 int stacksize;
}sqstack;


//用于产生变量的各种取值组合;

void creatzuhe(int n)
{
 int i,num=0,j=0,e;
 int temp[bianliang_max];
    for(i=0;i<N;i++)
  zuhe[i]=0;
 while(n)
 {
  e=n%2;
  num++;
  temp[j++]=e;
  n=n/2;

 }
 j=j-1;
    num=N-num;
 while(j>=0)
 {
     e=temp[j--];
  zuhe[num++]=e;
 }
}

//自底向上地根据运算符地优先级来建立分子树函数;当逻辑表达式读完后-子根zigen就是一棵完整的二叉树
int k=0;//建树的标志,k=1表示第一次建立分子树,要对左右孩子的指针域处理
void create(bitree &zigen,bitree l,bitree r)
{
    zigen->lchild=l;
 zigen->rchild=r;//分树的链接
 if(l&&r)
 {
     if(int(l->data)>=65&&int(l->data)<=90)
  {
  l->lchild=NULL;
  l->rchild=NULL;
  }
   if(int(r->data)>=65&&int(r->data)<=90)
   {
     r->lchild=NULL;
     r->rchild=NULL;
   }

 }
}
 
//逻辑运算符的优先级判别;
char youxianji(char lie,char hang)
{
 int    i,j;
 char bijiao[7][7]={' ','|','&','~','(',')','#',
                 '|','>','<','<','<','>','>',
                       '&','>','>','<','<','>','>',                                                                                                            &n

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值