C 資料結構面試題

2021-10-19 20:33:27 字數 2809 閱讀 9110

【題1】 鍊錶和陣列有什麼區別

鍊錶和指標有以下幾點不同:

1)儲存形式

陣列是一塊連續的空間,宣告時就要確定長度。鍊錶是一塊可不連續的動態空間,長度可變,每個節點要儲存相鄰節點指標。

2)資料查詢

陣列的線性查詢速度快,查詢操作直接使用偏移位址。鍊錶需要按順序檢索節點,效率低。

3)資料插入和刪除

鍊錶可以快速插入和刪除節點,而陣列則可能需要大量資料移動。

4)越界問題

鍊錶不存在越界問題,陣列有越界問題。

說明:在選擇陣列或鍊錶資料結構體時,一定要根據實際需要進行選擇。陣列便於查詢,鍊錶便於插入刪除。陣列節省空間但是長度是固定的,鍊錶雖然變長但是佔了更多的儲存空間。

【題2】尋找單鏈表中間節點

如果是個雙鏈表,可以首位並行,利用兩個指標乙個從頭到尾,乙個從尾到頭,當兩個指標相遇時就找到了中間元素。

受此啟發可以想到單鏈表也可以用雙指標來實現中間節點的快速查詢:

1)有兩個指標同時從頭開始遍歷

2)乙個快指標一次走兩步,乙個慢指標一次走一步

3)快指標先到鍊錶尾部,而慢指標應該則恰好到達鍊錶的中部

注意:快指標到鍊錶尾部時,當鍊表長度為奇數時,慢指標指向的即是鍊錶中間指標。當鍊表長度為偶數時,慢指標指向的節點和慢指標指向的節點的下個節點都是鍊錶的中間節點。

typedef

struct node

node;

node*

middle

(lnode *head)

fast = slow = head;

//慢指標、快指標同時指向鍊錶首節點

while(!

(p=fast-

>next)

&&!p-

>next)

//迴圈,直到快指標下個節點或下下個節點為空

return slow;

//f返回中間節點

}

【題3】怎麼把乙個單鏈表反序

【題9】簡述佇列和棧的異同

佇列和棧都是線性儲存結構,但是兩者的插入和刪除資料的操作不同,佇列是「先進先出」,棧是「後進先出」。

注意:區別棧區和堆區

堆區的訪問是「順序隨意」,而棧區是「後進先出」。棧由編譯器自動分配釋放,存放函式的引數值、區域性變數等。其操作方法類似於資料結構中的棧。堆一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**。分配方式類似於鍊錶。

它與本體的堆和棧是兩回事。堆疊只是一種資料結構,而堆區和棧區是程式的不同記憶體儲存區域。

【題10】建立乙個鏈式棧

涉及:棧、指標、結構體

//首先建立乙個節點結構體

typedef

struct node

node,

*linkstack;

//建立空棧

void

createnullstack

(s)void

push

(linkstack &s,

int data)

void

pop(linkstack &s)

【題11】建立乙個鏈式佇列

//節點結構體

typedef

struct node

node,

*linkqueue;

//構建乙個由隊首、隊尾節點及佇列長度構成的**佇列結構體**

typedef

struct queue

queue,

*pqueue;

//建立乙個空佇列

pqueue createnullqueue

(pqueue &q)

q->head =

(linkqueue)

malloc

(sizeof

(node));

//申請隊首節點if(

null

== q-

>head)

q->tail =

(linkqueue)

malloc

(sizeof

(node));

//申請隊尾節點if(

null

== q-

>tail)

q->head-

>next = q-

>tail;

//佇列初始化

q->tail-

>next =

null

; q-

>head-

>data =0;

q->tail-

>data =

0l q-

>size =0;

return q;

}//佇列插入函式

pqueue push

(pqueue &q,

int data)

//佇列刪除函式

node pop

(pqueue& q)

【題13】建立乙個二叉樹

程式設計實現二叉樹的建立,二叉樹的先序、中序和後序遍歷。

二叉樹資料結構

指標樹的每個節點應該包含三個元素:資料元素、左孩子指標元素、右孩子指標元素。

typedef

struct bitnode

C 面試題 資料結構

在面試中,發現有些題目類似,就記下來。便於下次面試的時候出現。持續更新 幸福就是當你照鏡子的時候,喜歡你看到的那個人,加油!翻轉乙個單向鍊錶 class listnode listnode listnode 順序插入結點,只需遍歷結點,找到尾結點 void listnode createlist i...

資料結構 面試題

python實現 寫個大概,import re def quick sort alist,first,last if first last return mid value alist first low first high last while low high while low mid va...

資料結構 面試題

2.棧2.2使用棧計算字尾表示式 2.3對棧的元素進行排序 2.4判斷表示式是否括號平衡 3.佇列 4.鍊錶 5.樹6.圖 7.字典樹 這是一種高效的樹形結構,但值得單獨說明 8.雜湊表 雜湊表 1.1 尋找陣列中第二小的元素 思路 公升序排序之後,輸出第二個數字 1.2 找到陣列中第乙個不重複出現...