微軟面試2 堆疊

2021-06-29 09:53:28 字數 654 閱讀 9167

2.設計包含min函式的棧(棧)

定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。

要求函式min、push以及pop的時間複雜度都是o(1)。

這裡我採用的是雙向鍊錶的方式實現堆疊,min函式設計的時候,一開始想到了設定乙個指標指向最小的元素,但是發現當pop的時候,如果最小的元素被pop了,就不是o(1)了,所以最後採用了空間換取效率的方法,就是採用在每個節點上,增加乙個域,標識增加這個節點的時候,堆疊的最小值。

**如下

#include

#include

typedef struct lnode

*list;

typedef  struct stack

*stack;

int push(stack s,int i)

s->tail->min=s->min;

return 0;

}int pop(stack s)

int res=s->tail->data;

s->tail=s->tail->front;

s->tail->next=null;

return res;

}int init(stack s)

int min(stack s)

int main()

面試 堆疊 佇列 棧 堆之間的關係

1.2.3.電腦記憶體化分 1.區 2.全域性資料區 3.棧區 4.堆記憶體 堆疊 1.堆疊就是棧,是同乙個概念。佇列 1.限定只能在表的一端進行插入並且在另一端進行刪除操作的線性表。2.先進先出。棧 通常程式設計師說的是棧區 1.限定只能在表的一端進行插入同時刪除操作的線性表。2.先進後出。3.區...

堆是堆,棧歸棧

堆是堆,棧歸棧 第一 堅決澄清 堆是堆,棧歸棧。第二 曾經的 堆疊 再不允許重談,簡直就是扯淡!第三 下面內容均屬於從記憶體分配角度的闡述,不要與資料結構混淆。1 程式的記憶體分配 1 記憶體分配詳解 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放,...

面試題之一 堆疊區別

堆疊面試題 一 堆疊簡介 棧是編譯器自動申請與分配,程式設計師無法進行控制的順序線性結構,在程式結束時,由系統進行 堆是一種需要程式設計師手動申請的鍊錶結構,申請的記憶體空間需要程式設計師手動釋放,程式設計師不釋放時系統可能 二 堆疊差別棧 堆結構上 順序線性結構 鍊錶操作上 由編譯器自動申請分配釋...