重言式的判别
本人今年大二
课程设计是重言式的判别
个人觉得自己做的比较通俗易懂
也有没考虑充分的地方
主要是提供一个思路
然后交流学习一下
直接放课设的代码了
分了几个部分
#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;
int r=1;
int 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",