资源简介
自己用C语言做的NFA到DFA的转换
有较为详细的备注,希望有所帮助。
代码片段和文件信息
#include “hh.h“
#include “fun.h“
////////////////////////////检查操作////////////////////////////////////
///检查weight字符是否已经存在在chars字符串中,是返回1,否返回0
int ischarok(char weightchar chars[])
{
int i=0;
for(;i<(int)strlen(chars);i++)
{
if(weight==chars[i]) return 1;
}
return 0;
}
///检查状态集是否已经标记返回序号
int isexist(TableNode TN[]char chars[])
{
for(int i=0;i {
if(strcmp(TN[i].chchars)==0)
return i;
}
return 0;
}
//////////////////////////////////////////////////////////////////////
///////////////////////////////////图操作////////////////////////////////////
void Insert_Vertex(Graph gchar vertex)
{//插入新的顶点
g->NodeTable[g->NumVertex].data=vertex;
g->NodeTable[g->NumVertex].adj=NULL;
g->NumVertex++;
}
void Insert_Edge(Graph gchar v1char v2char weight)
{//插入边
Edge p;
p=(Edge)malloc(sizeof(struct edge));
p->cost=weight;
p->dest=v2;
p->link=g->NodeTable[v1-48].adj;
g->NodeTable[v1-48].adj=p;
}
void Construct_Graph(Graph gchar chars[])
{//创建图
int edgenvexn;
char i;
char headtail;
char weight;
g->NumVertex=0;
g->NumEdge=0;
g->MaxNumVertex=MAX;
g->NodeTable=(Vertex)malloc((g->MaxNumVertex)*sizeof(struct vertex));
printf(“输入NFA状态数:“);
flushall();
scanf(“%d“&vexn);
while(vexn<=0){
printf(“状态数必须>0请重新输入:\n“);
scanf(“%d“&vexn);
flushall();
}
vexn+=48;//转化成字符串形式
for(i=‘0‘;i Insert_Vertex(gi);
}
printf(“输入NFA的边数:“);
scanf(“%d“&edgen);
while(edgen<=0){
printf(“边数必须>0请重新输入:\n“);
scanf(“%d“&edgen);
}
printf(“输入 起始状态,接受字符 和 到达状态:\n“);
flushall();
//依次获取边的信息(起始顶点,接受字符,到达的顶点),并将这些边插入图中
for(i=0;i {
flushall();
scanf(“%c %c %c“&tail&weight&head);
while(tail<‘0‘||tail>=vexn||head<‘0‘||head>=vexn)
{
printf(“不存在此状态,请重新输入\n“);
scanf(“%c %c %c“&tail&weight&head);
}
while(!ischarok(weightchars))//判断是否存在该状态
{
printf(“字符集中不存在该字符,请重新输入\n“);
scanf(“%c %c %c“&tail&weight&head);
}
Insert_Edge(gtailheadweight);
}
}
void Destruct_Graph(Graph g)
{//销毁图
int i;
Edge p;
for(i=0;iNumVertex;i++)
{
p=g->NodeTable[i].adj;
while(p!=NULL)
{
g->NodeTable[i].adj=p->link;
p->link=NULL;
free (p);
p=g->NodeTable[i].adj;
}
}
g->NumEdge=0;
g->NumVertex=0;
printf(“图已销毁\n“);
}
void Show_Graph(Graph g)
{//显示图
int i;
Edge p;
for(i=0;iNumVertex;i++)
{
p=g->NodeTable[i].adj;
while(p!=NULL)
{
printf(“<%c%c%c>“g->NodeTable[i].datap->costg->NodeTable[p->dest-48].data);
p=p->link;
}
printf(“\n“);
}
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////状态转换操作////////////////////////////////////
void BubbleSort(char a[])
{//冒泡排序
int ij;
char temp;
int len=strlen(a);
for(i=0;i {
for(j=0;j
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 15571 2011-05-14 22:25 t3\Debug\fun.obj
文件 3507 2011-05-14 22:25 t3\Debug\main.obj
文件 188462 2011-05-14 22:25 t3\Debug\t3.exe
文件 246084 2011-05-14 22:25 t3\Debug\t3.ilk
文件 231736 2011-05-14 22:25 t3\Debug\t3.pch
文件 467968 2011-05-14 22:25 t3\Debug\t3.pdb
文件 50176 2011-05-14 22:25 t3\Debug\vc60.idb
文件 53248 2011-05-14 22:25 t3\Debug\vc60.pdb
文件 5683 2011-05-14 22:32 t3\fun.cpp
文件 852 2011-05-11 03:12 t3\fun.h
文件 1117 2011-05-14 22:25 t3\hh.h
文件 521 2011-05-14 22:32 t3\main.cpp
文件 4413 2011-04-27 20:08 t3\t3.dsp
文件 512 2011-04-27 19:46 t3\t3.dsw
文件 58368 2011-05-14 22:32 t3\t3.ncb
文件 48640 2011-05-14 22:32 t3\t3.opt
文件 1274 2011-05-14 22:25 t3\t3.plg
目录 0 2011-05-14 22:25 t3\Debug
目录 0 2011-05-14 22:32 t3
----------- --------- ---------- ----- ----
1378132 19
- 上一篇:C++卫星定位程序--通过卫星星历确定卫星位置
- 下一篇:C语言电子地图信息管理系统
相关资源
- c语言实现pl0编译器的扩充
- 预编译好的python3.6+window10下的annoy包
- 编译原理课程设计含報告
- electron4.2.6编译ffi.doc
- detours2.1 VC6中编译方法及源代码及使用
- Ubuntu下最简单的Cmake编译多个C和C++工
- libx264最新稳定版本附WINDOWS下编译步骤
- 编译C++需要的库文件win32 mak
- C语言编写的pl0语言编译器
- LL(1)文法求First和Follow集合
- 将字符串转为二元组编译原理
- 正则表达式转NFA
- 软件学院编译原理第二次上机求firs
- 逆波兰表达式 c语言实现
- 编译原理实验 DFA的最小化 c++代码
- 编译原理课程设计广工C语言
- 编译原理课程设计——算术表达式、
- VC++操作WPS表格的类(VC6.0编译通过)
- 广工编译原理课程设计 PL0C++改进需用
- 在Linux下编译并运行C程序
- 0513《编译原理》答案 设计并实现TI
- 编译原理firstselectfollow实验源代码
- VC++五子棋窗体界面程序源码可以VC6
- win10下vs2015编译TensorFlow1.4 C++源码 CP
- 编译原理实验判断文法是不是LL1文法
- 用C语言实现NFA到DFA的转换过程
- 预编译好的python3.7+window10下的annoy包
- 编译原理Pascal语言编译器用C实现
- c++实现NFA与DFA转换
- 编译原理PL0实验报告
评论
共有 条评论