资源简介

重言式判别程序源代码 数据结构 这是实验源程序和实验报告都有 C语言的

资源截图

代码片段和文件信息

#include
#include
#include
#include

#define  STACKINITSIZE 50
#define STACKINCREMENT 10
#define VARIMAXNUM 20
#define STARMAXLEN 100

typedef struct BiTNode
{
char data;
    struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode*BiTree;
typedef struct
{
BiTree *base;
BiTree *top;
int stacksize;
}Stack;

int varitab[VARIMAXNUM+1];
int sum;
char str[STARMAXLEN];
BiTree root;
Stack optrstackopndstack;
char optrtable[6][7]
={‘ ‘‘|‘‘&‘‘~‘‘(‘‘)‘‘#‘
   ‘|‘‘>‘‘<‘‘<‘‘<‘‘>‘‘>‘
   ‘&‘‘>‘‘>‘‘<‘‘<‘‘>‘‘>‘
   ‘~‘‘>‘‘>‘‘>‘‘<‘‘>‘‘>‘
   ‘(‘‘<‘‘<‘‘<‘‘<‘‘=‘‘ ‘
   ‘#‘‘<‘‘<‘‘<‘‘<‘‘ ‘‘=‘
};

/*栈的实现*/
int InitStack(Stack &s)
{
s.base=(BiTree *)malloc(STACKINITSIZE*sizeof(BiTree));
if(!s.base)
{
exit(-2);
}
s.top=s.base;
s.stacksize=STACKINITSIZE;
return 1;
}
BiTree GetTop(Stack s)
{
if(s.top==s.base)
{
return NULL;
}
return *(s.top-1);
}
int Push(Stack &sBiTree e)
{
if(s.top-s.base>=s.stacksize)
{
s.base=(BiTree *)realloc(s.base
(s.stacksize+STACKINCREMENT)*sizeof(BiTree));
if(!s.base)
{
exit(-2);
}
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*(s.top)=e;
s.top++;
return 1;
}
BiTree Pop(Stack &s)
{
if(s.top==s.base)
{
return NULL;
}
return *(--s.top);
}
void DestroyStack(Stack &s)
{
free(s.base);
}
/*栈的实现结束*/

void CreatVaritab(unsigned n)
{
int i;
for(i=0;i<*varitab;i++)
{
varitab[*varitab-i]=(n>>i)%2;
}
}
char cmp(char achar b)
{
int ij;
for(i=1;i<6;i++)
{
if(optrtable[i][0]==a)
break;
}
for(j=1;j<7;j++)
{
if(optrtable[0][j]==b)
break;
}
return optrtable[i][j];
}
void CreatBiTree()
{
BiTree tempab;
char *p=str;
temp=(BiTree)malloc(sizeof(BiTNode));
temp->data=‘#‘;
Push(optrstacktemp);
while((*p!=‘#‘)||(GetTop(optrstack)->data!=‘#‘))
{
if((*p>=65)&&(*p<=90))
{
temp=(BiTree)malloc(sizeof(BiTNode));
temp->data=*p;
temp->lchild=NULL;
temp->rchild=NULL;
Push(opndstacktemp);
p++;
}
else
{
switch(cmp(GetTop(optrstack)->data*p))
{
case ‘<‘:
temp=(BiTree)malloc(sizeof(BiTNode));
    temp->data=*p;
    temp->lchild=NULL;
    temp->rchild=NULL;
    Push(optrstacktemp);
    p++;
break;
case ‘=‘:
temp=Pop(optrstack);
free(temp);
p++;
break;
case ‘>‘:
temp=Pop(optrstack);
b=Pop(opndstack);
temp->rchild=b;
if(temp->data!=‘~‘)
{
a=Pop(opndstack);
temp->lchild=a;
}
Push(opndstacktemp);
break;
}/*switch*/
}/*else*/
}/*while*/
root=Pop(opndstack);/*若为空表达式则返回NULL*/
temp=Pop(optrstack);
free(temp);
}
int GetValue(BiTree &tree)
{
if(!tree)
{
return 0;
}
else if((tree->data>=65)&&(tree->data<=90))
{
return varitab[tree->data-64];
}
else
{
switch(tree->data)
{
case ‘|‘:
return (G

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5889  2008-05-31 23:30  重言式判别\main.cpp

     文件     109633  2008-07-16 12:07  重言式判别\重言式判别.doc

     目录          0  2008-07-16 12:07  重言式判别

----------- ---------  ---------- -----  ----

               115522                    3


评论

共有 条评论