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

📄 lstacktype.c

📁 即时计算加法
💻 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 + -