资源简介
重言式判别程序源代码
数据结构
这是实验源程序和实验报告都有
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课程设计--旅游管理系统
相关资源
- c++实现的MFC课程设计--旅游管理系统
- c语言写的搜索引擎完整版
- 装箱问题.C++算法
- 人工智能八数码问题 C++
- 《语音信号处理 C++版》所有源码
- 剪枝算法的五子棋C++程序
- C++ rapidjson 对类序列化(完美二次封装
- C++1A2B猜数字游戏
- aes加密算法的verilog和c++代码
- 信道容量的迭代算法的C语言实现
- 图像处理算法源代码,用C语言完成
- 约瑟夫死亡游戏C语言代码
- 拉普拉斯算子边缘检测C语言代码
- compat-libstdc++-33-3.2.3
- C++模拟ATM机界面设计
- 三次样条插值算法C++源代码
- 实矩阵与复矩阵的LU分解C++源代码
- 图形化的最小生成树C++原代码
- c/c++程序设计课后答案
- PAT乙级1001----1085全解C语言,
- 模数转换的C语言程序
- c++实现的免疫算法
- c语言课程设计-弹力球游戏
- C++的图书管理系统
- HMM隐马尔可夫模式的经典学习C语言源
- C++中探出打开文件夹对话框并获取文
- vc网络聊天室源代码mfc聊天器VC网络编
- c++ 用回溯法解决经典的N皇后问题
- C++象棋游戏C++象棋游戏C++象棋游戏
- jpg jpeg 解码 转 bmp RGB vs2013 c++
评论
共有 条评论