c語言 鍊錶的實現 鍊錶部分面試題的解答

2021-08-04 22:00:34 字數 4839 閱讀 6173

一、鍊錶與陣列的比較:

(1)陣列:

b.可以使用折半查詢元素,效率較高;

陣列缺點:a.空間連續,儲存效率低;

b.插入和刪除元素效率比較低;

(2)鍊錶:

鍊錶優點:a.插入和刪除元素不需要移動其餘元素,效率高,為o(1);

b.不要求連續空間,空間利用效率高;

鍊錶缺點:a.不提高隨機訪問元素的機制;

b.查詢元素和搜尋元素的效率低,最快情況下為o(1),平常情況為o(n);

二、鍊錶與陣列在空間中儲存圖示:

(1)陣列的儲存方式:是連續存放的

(2)鍊錶的儲存方式:不是連續存放的

三、**區:

(鍊錶的實現與鍊錶的面試題的實現)

標頭檔案(#linklist.h)

#ifndef _link_h__

#define _link_h__

#include#include#include#includetypedef int datatype;

typedef struct node

node, *pnode;

void initlinklist(pnode *head); //初始化函式

void pushfront(pnode *head,datatype d); //頭插

void popfront(pnode*head); //頭刪

void pushback(pnode *head, datatype d); //尾插

void popback(pnode*head); //尾刪

void reverse(pnode*head); //逆序

void insert(pnode*head,datatype d,int pos); //指定位置插入資料

void delnottail(pnode pos); //刪除無頭的不為結尾的任意乙個節點

pnode find(pnode head,datatype d); //查詢函式

pnode findmidnode(pnode plist); //找中間節點的位置

pnode checkcycle(pnode plist); //檢測是否帶環

int getcirclelength(pnode meet); //求環的長度

pnode getcircleentrynode(pnode meet, pnode plist); //獲取環的進入點

pnode checkcross(pnode p1, pnode p2); //兩條鏈的交點

void josephcycle(pnode plist, int k); //約瑟夫環

void delknode(pnode plist, int k); //刪除倒數第k個節點

void sortlist(pnode head); //氣泡排序

void reverseshow(pnode head); //逆序列印

pnode merge(pnode plist1, pnode plist2); //兩條有序鏈的合併,合併之後依然有序

void display(pnode head); //顯示函式

void destroylist(pnode*head); //釋放空間

#endif //

函式(linklist.c)

#include"linklist.h"

void initlinklist(pnode *head) //初始化函式

void pushfront(pnode*head, datatype d) //頭部插入資料函式

void popfront(pnode*head) //頭部刪除資料函式

}void pushback(pnode *head,datatype d) //尾部插入資料函式

else

pur->next = p; }}

void popback(pnode *head) //尾部刪除資料函式

if (pur!= null)

else }

void insert(pnode*head,datatype d,int pos) //指定位置插入函式

if (pos == 1)

else

p->next = cur;

pur->next = p; }}

void reverse(pnode*head) //逆序函式

*head = newhead;

}void reverseshow(pnode head) //逆序列印函式

void delnottail(pnode pos) //刪除無頭的非尾節點

}pnode find(pnode head,datatype d) //查詢函式

return null;

}pnode findmidnode(pnode plist) //查詢中間節點函式

return slow;

}pnode checkcycle(pnode plist) //判斷鍊錶是否帶環

} return null;

}int getcirclelength(pnode meet) //測量環的長度

}pnode getcircleentrynode(pnode meet, pnode plist) //查詢環的進入點

while (fast != slow)

return slow;

}pnode getnode(pnode plist1, pnode plist2,int k) //checkcross函式的子函式

while (fast != slow)

return slow;

}pnode checkcross(pnode p1, pnode p2) //判斷兩條鏈是否相交,若相交返回交點位置

while (plist2 != null)

if (plist1 != plist2)

return null;

if ((count1 - count2) > 0)

else }

void josephcycle(pnode plist, int k) //約瑟夫環

pur = cur->next;

cur->next = pur->next;

printf("%d ", pur->data);

free(pur);

cur = cur->next;

} printf("%d ", cur->data);

}void delknode(pnode plist, int k) //刪除倒數第k個節點

if (k == 0)

k = k%len;

if (k ==0)

while (fast->next!=null)

else

}cur = slow->next;

slow->next = cur->next;

free(cur);

}pnode merge(pnode plist1, pnode plist2) //合併兩條有序鍊錶

plist1->next = ret2;

sortlist(ret1);

return ret1;

}void sortlist(pnode head) //排序

cur = cur->next;

ret = cur;

} tail = ret;

cur = head; }}

void display(pnode head) //顯示函式

printf("over\n");

}void destroylist(pnode*head) //釋放空間函式

*head = null;

}

測試函式(test.c)

#include"linklist.h"

void test1()

void test2()

void test3()

void test4() //逆序

test5()

test6()

test7()

void test8()

destroylist(&head);

}void test9()

void test10()

void test11()

else

printf("yes\n");

}void test12()

void test13()

else }

void test14()

else

display(p1);

display(p2);

}void test15()

find(p1, 41)->next = find(p1, 1);

p2 = find(p1, 1);

josephcycle(p2, 3);

}int main()

面試題 鍊錶的 部分 翻轉

2016年08月09日 21 43 37 問題 給出乙個單鏈表 不帶頭節點 和乙個數k,請翻轉此單鏈表?例如 1 2 3 4 5 k 0 翻轉過後 1 2 3 4 5 1 2 3 4 5 k 2 翻轉過後 2 1 4 3 5 1 2 3 4 5 k 10 翻轉過後 5 4 3 2 1 在討論鍊錶的 ...

鍊錶 鍊錶常見筆試題和面試題 C語言

本文為鍊錶常見的筆試題和面試題,包含鍊錶反轉 判斷鍊錶是否有環 查詢環形入口 查詢公共結點 合併兩個有序鍊錶 查詢倒數第k個結點 查詢中間結點 刪除有序鍊錶重複結點。node list reverse node head node p head node q head next node r q n...

鍊錶的面試題

1 比較順序表和煉表的優缺點,它們分別在什麼場景下使用?1 順序表支援隨機訪問,單鏈表不支援隨機訪問。2 順序表插入 刪除資料效率很低,時間複雜度為o n 除尾插和尾刪 單鏈表插入 刪除效率更高,時間複雜度為o 1 3 順序表的cpu高速緩衝效率更高,單鏈表cpu高速緩衝效率低。2 列印單向鍊錶 v...