資源簡介
重言式判別程序源代碼
數據結構
這是實驗源程序和實驗報告都有
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
- 上一篇:MFC 編程:圣誕節的禮物
- 下一篇:c++實現的MFC課程設計--旅游管理系統
評論
共有 條評論