共享栈
1.定義
????所謂共享?xiàng)>褪抢靡粋€(gè)數(shù)組實(shí)現(xiàn)兩個(gè)棧. 先來看一下共享?xiàng)5臄?shù)據(jù)結(jié)構(gòu)
typedef struct SharedStack {int top1;int top2;SeqStackType* data; }SharedStack;2. 初始化
void SharedStackInit(SharedStack* stack) {if(stack == NULL){return;//非法輸入}stack -> top1 = 0;stack -> top2 = MAXSIZE;stack -> data = (SeqStackType*)malloc(sizeof(MAXSIZE));if(stack -> data == NULL){return;//內(nèi)存申請(qǐng)失敗} }3. 第一個(gè)棧入棧
void SharedStackPush1(SharedStack* stack, SeqStackType value) {if(stack == NULL){return;//非法輸入}if(stack -> top1 == stack -> top2){return;//共享?xiàng)R褲M}stack -> data[stack -> top1++] = value; }4. 第二個(gè)棧入棧
void SharedStackPush2(SharedStack* stack, SeqStackType value) {if(stack == NULL){return;//非法輸入}if(stack -> top1 == stack -> top2){return;//共享?xiàng)R褲M}stack -> data[--stack -> top2] = value; }5. 第一個(gè)棧出棧
void SharedStackPop1(SharedStack* stack) {if(stack == NULL){return;//非法輸入}if(stack -> top1 == 0){return;//棧空}stack -> top1--; }6. 第二個(gè)棧出棧
void SharedStackPop2(SharedStack* stack) {if(stack == NULL){return;//非法輸入}if(stack -> top2 == MAXSIZE){return;//棧空}stack -> top2++; }7. 取第一個(gè)棧的棧頂元素
int SharedStackTop1(SharedStack* stack, SeqStackType* value) {if(stack == NULL || value == NULL){return 0;//非法輸入}*value = stack -> data[stack -> top1 -1];return 1; }8. 取第二個(gè)棧的棧頂元素
int SharedStackTop2(SharedStack* stack, SeqStackType* value) {if(stack == NULL || value == NULL){return 0;}*value = stack -> data[stack -> top2];return 1; }總結(jié)
- 上一篇: 判断字符串出栈合法性
- 下一篇: 迷宫求解(递归)