📄 stack.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 + -