⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stack.h

📁 编译原理 语义分析 c++ vc6.0 可用作本科课程设计、毕业设计等
💻 H
字号:
#define MAXCHILDREN 1000
#define MAXNODENUMBER 1000
#define MAXREG 1000

#define MaxLength 128
#define MaxTokenLength 32
#define MaxGrammar 256
#define Maxnode 256
////////////////////////////////////////////////////////////////////////////
struct node
{   // 有穷自动机结点
	node *next[MAXCHILDREN];
	char throught[MAXCHILDREN];
	int number; // 结点编号
	char state;
};
int initnode( node *p )
{   // 初始化有穷自动机结点
	for(int i=0;i<MAXCHILDREN;i++)
	{
		p->next[i]=NULL;
		p->throught[i]='\0';
	}
	p->number=-1;
	p->state='\0';
	return 1;
}
struct nfapoin
{   // 有穷自动机初态和终态指针
	node *start;
	node *accept;
	int nodenumber;
	node *nodetable[MAXNODENUMBER];
};
int initpoin( nfapoin *&p )
{   // 初始化有穷自动机初态和终态指针
    p->start=NULL;
	p->accept=NULL;
	p->nodenumber=0;
	for(int i=0;i<MAXNODENUMBER;i++)
		p->nodetable[i]=NULL;
	return 1;
}
////////////////////////////////////////////////////////////////////////////
// 单链表实现的栈  指针栈
struct StackNode
{
	node *pion;
	StackNode *next;
};
typedef StackNode *Stack;
// 初始化栈
int InitStack( Stack &S )
{
	S = NULL;
	return 1;
}
// 入栈
int Push( Stack &S, node *e )
{
	StackNode *p = new StackNode;
	p->pion = e;
	p->next = S;
	S = p;
	return 1;
}
// 出栈
int Pop( StackNode *&S )
{
    if (S==NULL) return 0;
	StackNode *p = S;
	S = S->next;
	delete p;
	return 1;
}
// 访问栈顶
node *Top( const Stack &S )
{
    return S->pion;
}
// 判断栈是否为空
int Empty( const Stack &S )
{
    return S==NULL;
}
/////////////////////////////////////////////////////
// 单链表实现的栈  运算符栈        |  .  *  (   )   #
struct lStackNode
{
	char ch;
	lStackNode *next;
};
typedef lStackNode *lStack;
// 初始化栈
int lInitStack( lStack &S )
{
	S = NULL;
	return 1;
}
// 入栈
int lPush( lStack &S, char e )
{
	lStackNode *p = new lStackNode;
	p->ch = e;
	p->next = S;
	S = p;
	return 1;
}
// 出栈
int lPop( lStack &S )
{
    if (S==NULL) return 0;
	lStackNode *p = S;
	S = S->next;
	delete p;
	return 1;
}
// 访问栈顶
char lTop( const lStack &S )
{
    return S->ch;
}
// 判断栈是否为空
int lEmpty( const lStack &S )
{
    return S==NULL;
}
///////////////////////////////////////////////////////////////////////////////
// 单链表实现的栈  分析栈
struct AStackNode
{
	char item[MaxTokenLength];
	AStackNode *next;
};
typedef AStackNode *AStack;
// 初始化栈
int AInitStack( AStack &S )
{
	S = NULL;
	return 1;
}
// 入栈
int APush( AStack &S, char *e )
{
	AStackNode *p = new AStackNode;
	for(int i=0;i<MaxTokenLength;i++){
		p->item[i] = *(e+i);
	}
	p->next = S;
	S = p;
	return 1;
}
// 出栈
int APop( AStack &S )
{
    if (S==NULL) return 0;
	AStackNode *p = S;
	S = S->next;
	delete p;
	return 1;
}
// 访问栈顶
char *ATop( const AStack &S )
{
    return S->item;
}
// 判断栈是否为空
int AEmpty( const AStack &S )
{
    return S==NULL;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -