📄 cj_stack.c
字号:
/******************************************************************************/
/* */
/* 文件名:CJ_STACK.C */
/* 创建人:江华 */
/* 日 期:2005-06-09 */
/* 描 述:堆栈函数组文件 */
/* */
/* */
/* 修改人: */
/* 日 期: */
/* 描 述: */
/* */
/******************************************************************************/
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include "cj_stack.h"
const char CJSKErrMsg[][100] =
{
"",
"(1) 堆栈初始化失败.",
"(2) 堆栈已空.",
"(3) 分配新堆栈结点失败.",
"(4) 释放栈结点失败.",
"(5) 销毁栈空间失败."
};//错误消息
/*堆栈初始化*/
int CJSKInitial(PTCJSKStack v_sk, TCJUINT4 v_size,TCJUINT4 v_initial,
TCJUINT4 v_next,TCJUINT4 v_maxexts,PTCJEMStack v_stack)
{
if(CJRSInitial(&(v_sk->enodes),sizeof(TCJSKElemNode)+v_size,1,1,v_initial,
v_next,v_maxexts,NULL,NULL,v_stack)==YCJERROR)
{
CJEMPush(v_stack,5,1,'Z',"STK",1,__LINE__,__FILE__,CJSKErrMsg[1]);
return YCJERROR;
}
v_sk->stack_b=NULL;
v_sk->stack_t=NULL;
v_sk->stackcount=0;
v_sk->nodesize=sizeof(TCJSKElemNode);
v_sk->datasize=v_size;
return YCJOK;
}
/*取栈顶元素*/
int CJSKGetTop(PTCJSKStack v_sk, void **v_ptr,PTCJEMStack v_stack)
{
if(v_sk->stack_t==NULL)
{
CJEMPush(v_stack,5,1,'Z',"STK",2,__LINE__,__FILE__,CJSKErrMsg[2]);
return YCJERROR;
}
memcpy(*v_ptr,(char *)v_sk->stack_t+v_sk->nodesize,v_sk->datasize);
return YCJOK;
}
/*压栈*/
int CJSKPush(PTCJSKStack v_sk, void * v_ptr, PTCJEMStack v_stack)
{
PTCJSKElemNode psen;
if((psen=(TCJSKElemNode *)CJRSAlloc(&(v_sk->enodes),NULL,v_stack))==NULL)
{
CJEMPush(v_stack,5,1,'Z',"STK",3,__LINE__,__FILE__,CJSKErrMsg[3]);
return YCJERROR;
}
memcpy((char *)psen+v_sk->nodesize,v_ptr,v_sk->datasize);
psen->prev=v_sk->stack_t;
psen->next=NULL;
if(v_sk->stack_t!=NULL)
v_sk->stack_t->next=psen;
v_sk->stack_t=psen;
if(v_sk->stack_b==NULL)
v_sk->stack_b=psen;
v_sk->stackcount++;
return YCJOK;
}
/*出栈*/
int CJSKPop(PTCJSKStack v_sk, void **v_ptr, PTCJEMStack v_stack)
{
PTCJSKElemNode psen;
if(v_sk->stack_t==NULL)
{
CJEMPush(v_stack,5,1,'Z',"STK",2,__LINE__,__FILE__,CJSKErrMsg[2]);
return YCJERROR;
}
memcpy(*v_ptr,(char *)v_sk->stack_t+v_sk->nodesize,v_sk->datasize);
psen=v_sk->stack_t;
if(v_sk->stack_t==v_sk->stack_b)
{
v_sk->stack_t=NULL;
v_sk->stack_b=NULL;
}
else
{
v_sk->stack_t=v_sk->stack_t->prev;
}
--v_sk->stackcount;
if(CJRSFree(&(v_sk->enodes),psen,NULL,v_stack)==YCJERROR)
{
CJEMPush(v_stack,5,1,'Z',"STK",4,__LINE__,__FILE__,CJSKErrMsg[4]);
return YCJERROR;
}
return YCJOK;
}
/*栈是否空*/
int CJSKStackEmpty(PTCJSKStack v_sk, PTCJEMStack v_stack)
{
if(v_sk->stackcount==0)
return YCJOK;
return YCJERROR;
}
/*销毁栈*/
int CJSKDestroy(PTCJSKStack v_sk, PTCJEMStack v_stack)
{
if(CJRSDestroy(&(v_sk->enodes),v_stack)==YCJERROR)
{
CJEMPush(v_stack,5,1,'Z',"STK",5,__LINE__,__FILE__,CJSKErrMsg[5]);
return YCJERROR;
}
v_sk->stack_b=NULL;
v_sk->stack_t=NULL;
v_sk->stackcount=0;
return YCJOK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -