Google面試題之設計乙個包含min函式的棧

2021-07-31 07:27:51 字數 1139 閱讀 6093

定義棧的資料結構,要求新增乙個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 ...