📄 lstacktype.c
字号:
/*
Name: LstackFuntion.c
Copyright: Starting Line
Author:
Date: 11-11-08 23:32
Description: Lstack 类的成员函数定义
*/
#include "includes.h"
/*
Function Name: LstCreater
Author:
Description: 用于建立一个新的表达式栈节
*/
const unsigned int SIZE_AERA = 200;//两个域一样大,所以用同一个指向
Lstack * CalStack_; //全局变量,为了便于在各个处理例程之间传递参数
void LstCreater ( Lstack * CalStack )
{
FUNT * FTemp = ( FUNT * ) malloc (SIZE_AERA * sizeof ( int ));//创建Cstack域的空间
num * nTemp = ( num * ) malloc ( SIZE_AERA * sizeof ( num ));//创建Dstack域的空间
if (( FTemp == NULL ) || ( nTemp == NULL ))
{
Error ( E_OVER_MEM );//若未分配成功内存,则调用错误处理例程
}
else
{
CalStack -> Cstack = FTemp;//将申请的域定向
CalStack -> Dstack = nTemp;
CalStack -> Ctop = CalStack -> Cstack;//栈顶指针
CalStack -> Dtop = CalStack -> Dstack;
CalStack -> StackLen = SIZE_AERA;//纪录该小节被扩展的次数
}
}
/*
Function Name: LstConn
Author:
Description: 用于将两个不同的表达式栈连接
*/
void LstExpand ( Lstack * Old )
{
int i;//临时变量
int Doffset , Coffset;
Doffset = Old -> Dtop - Old -> Dstack;
Coffset = Old -> Ctop - Old -> Cstack;
FUNT * FTemp = NULL;
num * nTemp = NULL;
FTemp = ( FUNT * ) malloc (( SIZE_AERA + ( Old -> StackLen )) * sizeof ( int ));//创建新的Cstack域的空间,每次比原来扩展200的单位
nTemp = ( num * ) malloc (( SIZE_AERA + ( Old -> StackLen )) * sizeof ( num ));//创建新的Dstack域的空间,比原来扩展200单位
if (( FTemp == NULL ) || ( nTemp == NULL ))
{
Error ( E_OVER_MEM );//若未分配成功内存,则调用错误处理例程
}
else
{
for ( i = 0 ; i < ( Old -> StackLen - SIZE_AERA ) ; ++i )
{
/*
将原来的域中的值拷到新的域中
*/
*( FTemp + i ) = * (( Old -> Cstack ) + i );
*( nTemp + i ) = * (( Old -> Dstack ) + i );
}
free ( Old -> Cstack );
free ( Old -> Dstack );
Old -> Cstack = FTemp;//将申请的域定向
Old -> Dstack = nTemp;
FTemp = NULL;
nTemp = NULL;
Old -> Dtop = Old -> Dstack + Doffset;//重新定向偏移
Old -> Ctop = Old -> Cstack + Coffset;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -