• 大小: 205KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: C/C++
  • 标签: DFA  NFA  编译  c语言  

资源简介

自己用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


评论

共有 条评论