1.定義
????所謂共享棧就是利用一個數組實現兩個棧. 先來看一下共享棧的數據結構
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;//內存申請失敗}
}
3. 第一個棧入棧
void SharedStackPush1(SharedStack* stack, SeqStackType value)
{if(stack == NULL){return;//非法輸入}if(stack -> top1 == stack -> top2){return;//共享棧已滿}stack -> data[stack -> top1++] = value;
}
4. 第二個棧入棧
void SharedStackPush2(SharedStack* stack, SeqStackType value)
{if(stack == NULL){return;//非法輸入}if(stack -> top1 == stack -> top2){return;//共享棧已滿}stack -> data[--stack -> top2] = value;
}
5. 第一個棧出棧
void SharedStackPop1(SharedStack* stack)
{if(stack == NULL){return;//非法輸入}if(stack -> top1 == 0){return;//棧空}stack -> top1--;
}
6. 第二個棧出棧
void SharedStackPop2(SharedStack* stack)
{if(stack == NULL){return;//非法輸入}if(stack -> top2 == MAXSIZE){return;//棧空}stack -> top2++;
}
7. 取第一個棧的棧頂元素
int SharedStackTop1(SharedStack* stack, SeqStackType* value)
{if(stack == NULL || value == NULL){return 0;//非法輸入}*value = stack -> data[stack -> top1 -1];return 1;
}
8. 取第二個棧的棧頂元素
int SharedStackTop2(SharedStack* stack, SeqStackType* value)
{if(stack == NULL || value == NULL){return 0;}*value = stack -> data[stack -> top2];return 1;
}