C語言 ,嵌入式 ,資料結構 面試題目(3)

2021-08-16 21:16:42 字數 2271 閱讀 3362

182 鍊錶題:乙個鍊錶的結點結構

struct node

;typedef struct node node ;

(1)已知鍊錶的頭結點head,寫乙個函式把這個鍊錶逆序 ( intel)

node * reverselist(node *head) //鍊錶逆序

p2->next = p1 ;

head = p2 ;

return head ;

}(2)已知兩個鍊錶head1 和head2 各自有序,請把它們合併成乙個鍊錶依然有序。(保留所有結點,即便大小相同)

node * merge(node *head1 , node *head2)

else

node *pcurrent = head ;

while ( p1 != null && p2 != null)

else

}if ( p1 != null )

pcurrent->next = p1 ;

if ( p2 != null )

pcurrent->next = p2 ;

return head ;

}(3)已知兩個鍊錶head1 和head2 各自有序,請把它們合併成乙個鍊錶依然有序,這次要求用遞迴方法進行。 (autodesk)

答案:node * mergerecursive(node *head1 , node *head2)

else

return head ;

}183.利用鍊錶實現將兩個有序佇列a和b合併到有序佇列h中,不准增加其他空間。

請提供全一點的程式

以公升序為例:

while(a != null && b!= null)

else if (a->data == b->data)

else

h = h->next;

}if (a == null)

}else 

}184單向鍊錶的反轉是乙個經常被問到的乙個面試題,也是乙個非常基礎的問題。比如乙個鍊錶是這樣的: 1->2->3->4->5 通過反轉後成為5->4->3->2->1。最容易想到的方法遍歷一遍鍊錶,利用乙個輔助指標,儲存遍歷過程中當前指標指向的下乙個元素,然後將當前節點元素的指標反轉後,利用已經儲存的指標往後面繼續遍歷。源**如下:

struct linka ;

void reverse(linka*& head)

head->next = null;

head = pre;

}還有一種利用遞迴的方法。這種方法的基本思想是在反轉當前節點之前先呼叫遞迴函式反轉後續節點。源**如下。不過這個方法有乙個缺點,就是在反轉後的最後乙個結點會形成乙個環,所以必須將函式的返回的節點的next域置為null。因為要改變head指標,所以我用了引用。演算法的源**如下:

linka* reverse(linka* p,linka*& head)

else

}185 對如下雙鏈表

typedef struct _node

node;

a.請寫出**,將node*n插入到node*p後。

b.如果多執行緒同時訪問此鍊錶,需要加鎖,請說明以下步驟

(a)申請記憶體給n.

(b)n資料初始化。

(c)插入

注意加鎖和解鎖的時機。

node* insert(node* p, node* n)

if (p->pnext != null)

n->pprev = p;

n->pnext = p->pnext;

p->pnext = n;

return n;

}186、試建立二叉數,並寫出常見的幾種遍歷方式 ?

#include "stdio.h"

#include "string.h"

#include

#define null 0

typedef struct bitnodebitnode,*bitree;

bitree create(bitree t)

return t;

}void preorder(bitree t)

}//先序遍歷

void inorder(bitree t)

}//中序遍歷

void postorder(bitree t)

}//後序遍歷

187、 前序遍歷輸入,如圖所示,寫出後序遍歷輸出結果?

例如二叉樹:

輸入序列abd..eh...cf.i..g..

輸出結果為:?

答案:輸出結果為:dhebifgca

嵌入式C語言面試題

1 讀程式,回答問題 int main int argc,char argv a 寫出程式的結果 b 在乙個可移植的系統中這種表示式是否存在風險?why?答 a 4 b 存在風險,因為c c 5 在這個表示式中,對c有兩次修改,行末未定義,c的值不明確。2 include stdio.h int a...

嵌入式C語言面試題(二)

1 讀程式段,回答問題 int main int argc,char argv 複製 a 寫出程式輸出 b 在乙個可移植的系統中這種表示式是否存在風險?why?include stdio.h int a 0 int b static char c int main int argc,char arg...

嵌入式C語言面試題(二)

1 讀程式段,回答問題 int main int argc,char argv a 寫出程式輸出 b 在乙個可移植的系統中這種表示式是否存在風險?why?include stdio.h int a 0 int b static char c int main int argc,char argv a...