棧操作之雙端順序棧
來源:程序員人生 發(fā)布時(shí)間:2014-09-29 08:00:01 閱讀次數(shù):3154次
數(shù)據(jù)結(jié)構(gòu):
棧是允許在同一端進(jìn)行插入和刪除操作的特殊線性表。允許進(jìn)行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動(dòng);棧中元素個(gè)數(shù)為零時(shí)稱為空棧。插入一般稱為進(jìn)棧(PUSH),刪除則稱為退棧(POP)。棧也稱為后進(jìn)先出表。
操作系統(tǒng):
由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧
棧使用的是一級(jí)緩存, 他們通常都是被調(diào)用時(shí)處于存儲(chǔ)空間中,調(diào)用完畢立即釋放。
雙端棧模板代碼:
#define TRUE 1
#define FALSE 0
#define M 100
typedef struct
{
StackElementType Stack[M];
StackElementType top[2]; /*top[0]和top[1]分別為兩個(gè)棧頂指示器*/
}DqStack;
/*初始化操作。*/
void InitStack(DqStack *S)
{
S->top[0]=-1;
S->top[1]=M;
}
/*進(jìn)棧操作。*/
int Push(DqStack *S,StackElementType x,int i)
{
/*把數(shù)據(jù)元素x壓入i號(hào)堆棧*/
if(S->top[0]+1==S->top[1]) /*棧已滿*/
return(FALSE);
switch(i)
{
case 0:
S->top[0]++;
S->Stack[S->top[0]]=x;
break;
case 1:
S->top[1]--;
S->Stack[S->top[1]]=x;
break;
default: /*參數(shù)錯(cuò)誤*/
return(FALSE)
}
return(TRUE);
}
/*出棧操作。*/
int Pop(DqStack *S,StackElementType *x,int i)
{
/* 從i 號(hào)堆棧中彈出棧頂元素并送到x中 */
switch(i)
{
case 0:
if(S->top[0]==-1)
return(FALSE);
*x=S->Stack[S->top[0]];
S->top[0]--;
break;
case 1:
if(S->top[1]==M)
return(FALSE);
*x=S->Stack[S->top[1]];
S->top[1]++;
break;
default:
return(FALSE);
}
return(TRUE);
}
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)