????所謂最小棧, 就是當前棧頂元素最小, 我們可以這樣做, 每次在入棧之前, 將待入棧元素與棧頂元素相比, 每次現將待入棧的元素先入棧, 再將帶入棧的元素和較小的元素入棧, 這樣就可以保證每次棧頂元素是最小元素. 在出棧的時候規定每次出棧兩個元素,這樣就可以保證在出棧之后棧頂元素任然是最小元素
????1. 最小棧的初始化
#include"ministack.h"void MiniStackInit(MiniStack* ministack)
{if(ministack == NULL){return;//非法輸入}SeqStackInit(&(ministack -> stack));
}
????????????????????
????2. 入棧
void MiniStackPush(MiniStack* ministack, SeqStackType value)
{if(ministack == NULL){return;//非法輸入}SeqStackType top_value;int ret = SeqStackGetFront(&(ministack -> stack), &top_value);if(ret == 0){SeqStackPush(&(ministack -> stack), value);SeqStackPush(&(ministack -> stack), value);return;}SeqStackType min = (top_value < value) ? top_value : value;SeqStackPush(&(ministack -> stack), value);SeqStackPush(&(ministack -> stack), min);
}
????????????????????
????3. 出棧
void MiniStackPop(MiniStack* ministack)
{if(ministack == NULL){return;//非法輸入}if(ministack -> stack.size == 0){return;//空棧}SeqStackPop(&(ministack -> stack));SeqStackPop(&(ministack -> stack));
}
????????????????????