面試題 堆和佇列

2021-07-04 18:13:57 字數 1393 閱讀 3832

堆和佇列是一種資料結構,可以用來儲存資料,他們兩者的主要區別是:堆是先進後出的資料結構,即先入棧的資料後出,最後入棧的資料最先出;佇列的先進先出,先入佇列的資料先出。

在面試中會要求使用鍊錶或者陣列寫乙個棧或者佇列,本文採用鍊錶寫棧和佇列,並列出需要注意的要點。

首先是使用鍊錶實現入棧、出棧和棧的大小。

#include //定義乙個鍊錶

template struct list_t_s

;//棧的實現

template class stack

//判斷棧是否為空

bool isempty()

//獲取棧的大小

int getsize()

//入棧

void push(const t &data);

//獲取棧中元素

t getelement();

//出棧

void pop();

private:

int size;

list_t_s*top;

list_t_s*base;

};template void stack::push(const t &data)

else }

template t stack::getelement()

template void stack::pop()

else }

}

需要注意的是:棧為先入後出的順序,因此在用鍊錶設計棧時,入棧將新的鍊錶節點插入在鍊錶的頭部,並將top的位置向前移動一位,出棧將鍊錶頭部的節點刪除,並將top向後移動一步。

其次使用鍊錶實現佇列的入隊,出隊操作,在該部分,將獲取資料和出隊寫在一起了。

#include templatestruct list_t

;templateclass queue_t

void addelement(const t& data); //新增元素到佇列

t getelement(); //取佇列中的元素

bool isempty()

int getsize()

private:

list_t*head, *rear; //佇列的頭和尾

int size;

};templatevoid queue_t::addelement(const t& data)

else }

templatet queue_t::getelement()

else //刪除煉表頭節點 確保是先進先出

}

需要注意的是:佇列是先進先出,所以在使用鍊錶實現入隊時,將新節點插入到鍊錶的尾部,並將rear後移一位,實現出隊時,將頭部的節點先刪除,並將head後移一位。

棧和佇列面試題

遞迴反轉乙個棧 void reverse stack s reverse s int tmp2 s.top s.pop reverse s s.push tmp1 reverse s s.push tmp2 遞迴排序乙個棧 void sort stack s sort s int tmp2 s.to...

棧和佇列面試題

1.使用兩個棧,實現乙個佇列。棧 先進後出,且只能從棧頂pop出資料。佇列 先進先出,對頭pop資料,隊尾push資料。如下 include template class myqueue void pop else if stack2.empty private stack stack1 stack...

棧和佇列面試題

採用順序棧實現棧基本操作 採用鏈式佇列實現佇列基本操作 define maxsize100 typedef int sdatatype typedef struct stack stack typedef struct minstack minstack void stackinit stack s...