• 大小: 6KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: C/C++
  • 标签: nfa  

资源简介

已知一个正则表达式,把它转化为nfa,nfa转化为dfa,dfa最小化 用vc6.0完成的,可以立马用,很好很强大!

资源截图

代码片段和文件信息

/***********************************************************
  Copyright (c) 2004 RM.RYT. All rights reserved.
  Developed in Microsoft Visual C++ 6.0 Enterprise Edition.
 ***********************************************************/

#include 
#include 
#include 
#include 
#include 
#include 

/////////////////////////////////////////////////

#define NULL 0
#define LStack linkedStack

/////////////////////////////////////////////////

// 链式栈类的前视定义
template 
class linkedStack;

/////////////////////////////////////////////////

// 定义链式栈结点类
template 
class StackNode
{
friend class linkedStack;
private:
T data;
        StackNode *next;
StackNode(T item = 0 StackNode *p = NULL)
{
data = item;
next = p;
}
};

/////////////////////////////////////////////////

// 定义链式栈类
template 
class linkedStack
{
private:
StackNode *top;
public:
linkedStack();
~linkedStack();
bool IsEmpty(void) const;
int Length(void) const;
void Push(const T &item);
T Pop(void);
T GetTop(void);
void Clear(void);
};
// 构造函数
template 
linkedStack::linkedStack()
{
top = NULL;
}
// 析构函数
template 
linkedStack::~linkedStack()
{
Clear();
}
// 判断栈是否为空
template 
bool linkedStack::IsEmpty(void) const
{
return (! top);
}
// 获取队列的长度
template 
int linkedStack::Length(void) const
{
StackNode *temp = new StackNode();
temp = top;
int length = 0;
while (temp)
{
temp = temp->next;
length++;
}
return length;
}
// 压入数据(入栈)
template 
void linkedStack::Push(const T &item)
{
top = new StackNode(item top);
}
// 抽出数据(出栈)
template 
T linkedStack::Pop(void)
{
if (! IsEmpty())
{
    StackNode *temp = top;
top = top->next;
T value = temp->data;
delete temp;
return value;
}
else
{
cout << “Stack Already Empty!“ << endl;
getch();
exit(1);
}
}
// 获取栈头数据
template 
T linkedStack::GetTop(void)
{
if (! IsEmpty())
{
return top->data;
}
else
{
cout << “Stack Already Empty!“ << endl;
getch();
exit(1);
}
}
// 设置栈为空栈
template 
void linkedStack::Clear(void)
{
StackNode *temp = new StackNode();
while (top)
{
temp = top;
top = top->next;
delete temp;
}
}

/////////////////////////////////////////////////

// 定义邻接表的边表类
class Edge
{
public:
int number;
int position;
char weight;
Edge *link;
Edge();
Edge(int num int pos char ch);
};
Edge::Edge()
{
number = -1;
position = -1;
link = NULL;
}
Edge::Edge(int num int pos char ch)
{
number = num;
position = pos;
weight = ch;
    link = NULL;
}

/////////////////////////////////////////////////

// 定义邻接表的顶点类
class Vertex
{
public:
int number;
Vertex *next;
Edge *out;
Ve

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       25714  2006-06-25 08:33  DFAScan.cpp

评论

共有 条评论