?? cj_stack.c
字號(hào):
/******************************************************************************/
/* */
/* 文件名:CJ_STACK.C */
/* 創(chuàng)建人:江華 */
/* 日 期:2005-06-09 */
/* 描 述:堆棧函數(shù)組文件 */
/* */
/* */
/* 修改人: */
/* 日 期: */
/* 描 述: */
/* */
/******************************************************************************/
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include "cj_stack.h"
const char CJSKErrMsg[][100] =
{
"",
"(1) 堆棧初始化失敗.",
"(2) 堆棧已空.",
"(3) 分配新堆棧結(jié)點(diǎn)失敗.",
"(4) 釋放棧結(jié)點(diǎn)失敗.",
"(5) 銷毀棧空間失敗."
};//錯(cuò)誤消息
/*堆棧初始化*/
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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -