重言式的判别

重言式的判别

    本人今年大二
    课程设计是重言式的判别
    个人觉得自己做的比较通俗易懂
    也有没考虑充分的地方
    主要是提供一个思路
    然后交流学习一下
    直接放课设的代码了
    分了几个部分
#include <stdio.h>
#include <stdlib.h>
#define SIZE 100
#include <string.h>
#include <math.h>
typedef struct TREE
{
   
    char data;//存放字母
    char info;//存放字母的赋值
    struct TREE *lchild;
    struct TREE *rchild;
} TREE;
/*****二叉树的定义*****/
typedef struct
{
   
    TREE *top;
    TREE *base;
    int S_Size;
} S;
/****栈的定义****/

typedef struct QNode
{
   
    TREE *data;
    struct QNode *next;
} QNode;
typedef struct Quene
{
   
    QNode *front;
    QNode *rear;
} Quene;
/*****队列定义*****/
void InitS(S *S);
void push(S *S,TREE a);
TREE pop(S *S);
TREE gettop(S S);
int stackempty(S S);
void InitQuene(Quene *Q);
void EnQuene(Quene *Q,TREE* a);
TREE* DeQuene(Quene *Q);
char cmp(char a,char b);
TREE CreateTree(int *count,char v[][SIZE]);
char operate(TREE *T);
void calculation(TREE *T,char (*q)[][SIZE],int i,int count);
void calculate(TREE T,char *q,int count,char v[][SIZE]);
TREE CreateTree_0and1(int count);
void Visit(TREE *T,char*q,char *p,int *k,int *j);
void get(TREE T,int count,char*q);
char* arrange(int count);
void DestroyTree(TREE *T);
/*****以上为函数声明*****/
int main()
{
   

    TREE T;
    int count=0;//代表事件个数
    char *arrangement;//记录排列结果的指针
    char v[SIZE][SIZE];//真值表
    int k=10;//菜单选项
    int i,j;//用来标记真值表位置
    char c;//接收无用字符
    int b=0;//用来数'0','1'
    int r=1;//常数
    int x;//x用来控制真值表的打印
    for(; k!=0;)
    {
   

        printf("请输入您的选择:\n1.输入表达式 \n2.打印真值表并且判断是否为重言式\n3.自己输入赋值并且打印真值表输出对应的结果\n0.退出\n");
        scanf("%d",&k);
        switch(k)
        {
   
        case 1:
            T=CreateTree(&count,v);//创造表达式二叉树
            break;

        case 2:
            T=CreateTree(&count,v);//创造表达式二叉树
            arrangement=arrange(count);//得到排列
            v[0][count+1]='*';
            calculate(T,arrangement,count,v);//运算
            break;
        case 3:

            printf("请输入测试数据的组数:\n");
            scanf("%d",&r);
            printf("请输入事件顺序输入真假(真 '0',假 '1')\n");
            printf("顺序为:\n");
            c=getchar();//吸收回车
            for(j=1; j<=count; j++)
                printf("%c",v[0][j]);
            printf("\n请输入(中间不可空格隔开,不能用回车)");
            for(i=1; i<=r; i++)
                for(j=1; j<=count; j++)
                {
   
                    scanf("%c",&v[i][j]);
                }//接收字符
            v[0][count+1]='*';//‘*’表示结果
            for(i=1; i<=r; i++)
                calculation(&T,v,i,count);
            printf("是否打印真值表:输入1打印 其他值不打印\n");
            scanf("%d",
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值