定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。要求函式min,push,以及pop的時間複雜度都是o(1)。
演算法思想:考慮增加乙個輔助的堆疊,每次往原堆疊push資料時,同時將最小資料push到輔助堆疊中。具體原理如圖所示:
首先定義乙個棧結構題:
typedef struct
minstack;
//建立乙個輔助棧
minstack
side_stack;
//在push資料進入棧之前,需要對棧進行初始化
void init(minstack *s)
//push資料進棧
//原理很簡單,先判斷棧是否滿。之後將資料push入棧,若資料小於最小值,則將資料push到輔助棧中
void push(minstack *s,int value)
///將資料push到原資料棧中,再push之前,下標要+1
s->data[++s->top]=value;
}//pop資料出棧
//原理很簡單,先判斷棧是否為空。之後將原資料棧棧頂資料pop,pop之後將下標-1,判斷當前pop出去的資料是否和輔助棧頂資料相同,若相同,則輔助棧下標-1,則留在輔助棧頂的依然是最小資料。若不相同,則依然保留上一次最小值作為此次的最小值
int pop(minstack *s)
data=s->data[s->top--];
if(side_stack.data[side_stack.top]==data)
return data;
}
//下面是最小函式
int min(stack
*s)
//判斷棧是否空
bool empty(minstack *s)
return
false;
}
//判斷棧是否滿
bool full(minstack *s)
return
false;
}
Google面試題之棧的設計
日期 2013.11.17 地點 湖南大學軟體大樓211 題目 定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。要求函式min push以及pop的時間複雜度都是o 1 棧 stack 是限定在表尾 棧頂 進行插入或刪除操作一種線性結構,該結構資料元素有filo的特點,基本操作包括插...
15個google面試題
1 村子裡有100對夫妻,其中每個丈夫都瞞著自己的妻子 村里的每個妻子都能立即發現除自己丈夫之外的其他男人是否 唯獨不知道她自己的丈夫到底有沒有 村里的規矩不容忍通姦。任何乙個妻子,一旦能證明自己的男人 就必須當天把他殺死。村里的女人全都嚴格照此規矩辦事。一天,女頭領出來宣布,村里至少有乙個丈夫 請...
乙個面試題
題目是 假設乙個 搜尋引擎收錄了2 24首歌曲,並記錄了可收聽這些歌曲的2 30條url,但每首歌的url不超過2 10個。系統會定期檢查這些url,如果乙個url不可用則不出現在搜尋結果中。現在歌曲名和url分別通過整型的song id和url id唯一確定。對該系統有如下需求 1 通過song ...