?? 習題-5.c
字號:
//本程序只給出了算法思想
//讀者可以自己完善本程序
//雙向棧的棧結構類型與以前定義略有不同
#define StackSize 100 // 假定分配了100個元素的向量空間
#define char Datatype
typedef struct{
Datatype Data[StackSize]
int top0; //需設兩個指針
int top1;
}DblStack
void InitStack( DblStack *S )
{ //初始化雙向棧
S->top0 = -1;
S->top1 = StackSize; /*這里的top2也指出了向量空間,但由于是作為棧底,因此不會出錯*/
}
int EmptyStack( DblStack *S, int i )
{ //判棧空(棧號 i)
return (i == 0 && S->top0 == -1|| i == 1 && S->top1== StackSize) ;
}
int FullStack( DblStack *S)
{ //判棧滿,滿時肯定兩頭相遇
return (S->top0 == S-top1-1);
}
void Push(DblStack *S, int i, Datatype x)
{ //進棧(棧號i)
if (FullStack( S ))
Error("Stack overflow");//上溢、退出運行
if ( i == 0) S->Data[ ++ S->top0]= x; //棧0入棧
if ( i == 1) S->Data[ -- S->top1]= x; // 棧1入棧
}
Datatype Pop(DblStack *S, int i)
{ //出棧(棧號i)
if (EmptyStack ( S,i) )
Error("Stack underflow");//下溢退出
if( i==0 )
return ( S->Data[ S->top0--] );//返回棧頂元素,指針值減1
if( i==1 )
return ( S->Data[ S->top1++] ); //因為這個棧是以另一端為底的,所以指針值加1。
}
//其余算法略
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -