1.比較順序表和煉表的優缺點,說說它們分別在什麼場景下使用?
2.從尾到頭列印單鏈表
3.刪除乙個無頭單鏈表的非尾節點
4.在無頭單鏈表的乙個節點前插入乙個節點
5.單鏈表實現約瑟夫環
6.逆置/反轉單鏈表
7.單鏈表排序(氣泡排序&快速排序)
8.合併兩個有序鍊錶,合併後依然有序
9.查詢單鏈表的中間節點,要求只能遍歷一次鍊錶
10.查詢單鏈表的倒數第k個節點,要求只能遍歷一次鍊錶
typedef int datatype;
typedef struct listnode
listnode;
1.比較順序表和煉表的優缺點
順序表:記憶體中位址連續長度不可變更
支援隨機查詢 可以在o(1)內查詢元素
適用於需要大量訪問元素的 而少量增添/刪除元素的程式
鍊錶 :記憶體中位址非連續
長度可以實時變化
不支援隨機查詢 查詢元素時間複雜度o(n)
適用於需要進行大量增添/刪除元素操作 而對訪問元素無要求的程式
2.從尾到頭列印單鏈表
void printtalitohead(listnode* plist)//從尾到頭列印單鏈表
3.刪除乙個無頭單鏈表的非尾節點
void delnoheadnotail(listnode* pos)//刪除乙個無頭單鏈表的非尾節點
4.在無頭單鏈表的乙個節點前插入乙個節點
void addnohead(listnode* pos, datatype x)//在無頭單鏈表的乙個節點前插入乙個節點
5.單鏈表實現約瑟夫環
問題描述
:約瑟夫問題的一種描述是:編號為1,2,…,n的n個人按順時針方向圍坐一圈,每人持乙個密碼(正整數)。一開始任選乙個正整數作為報數上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下乙個人開始重新從1報數,如此下去,直至所有人全部出列為止。
listnode* josephring(listnode* list, int k)//約瑟夫環
pos->next = cur; //將單鏈表的首尾節點連起來成環
if (list == null)
while (cur->next != cur)
next = cur->next;
cur->data = next->data;
cur->next = next->next;
free(next);
} return cur;
}
6.逆置/反轉單鏈表
listnode* reverse(listnode* list)//逆置/反轉單鏈表
return newlist;
}
7.單鏈表排序(氣泡排序&快速排序)
void bubblesort(listnode* list)//單鏈表排序(氣泡排序&快速排序)
while (tail != list->next)
cur = cur->next;
next = next->next;
} tail = cur;
}}
8.合併兩個有序鍊錶,合併後依然有序
void conbine(listnode* list1,listnode* list2)//合併兩個有序鍊錶,合併後依然有序
else if ((list1 == null)&&(list2 != null))
else
tmp->next = list2;
bubblesort(list1);
}}
9.查詢單鏈表的中間節點,要求只能遍歷一次鍊錶
listnode* searchmid(listnode* list)//查詢單鏈表的中間節點,要求只能遍歷一次鍊錶
return slow;
}
10.查詢單鏈表的倒數第k個節點,要求只能遍歷一次鍊錶
listnode* searchbknode(listnode* list, int k)//查詢單鏈表的倒數第k個節點,要求只能遍歷一次鍊錶
}while(fast->next)
return slow;
}
C語言實現單鏈表面試題(基礎篇)
順序表 1.記憶體中位址連續 2.長度不可變更 3.支援隨機查詢 可以在o 1 內查詢元素 4.適用於需要大量訪問元素的 而少量增添 刪除元素的程式 鍊錶 1.記憶體中位址非連續 2.長度可以實時變化 3.不支援隨機查詢 查詢元素時間複雜度o n 4.適用於需要進行大量增添 刪除元素操作而對訪問元素...
C語言實現單鏈表面試題(基礎篇)
順序表 1.記憶體中位址連續 2.長度不可變更 3.支援隨機查詢 可以在o 1 內查詢元素 4.適用於需要大量訪問元素的 而少量增添 刪除元素的程式 鍊錶 1.記憶體中位址非連續 2.長度可以實時變化 3.不支援隨機查詢 查詢元素時間複雜度o n 4.適用於需要進行大量增添 刪除元素操作而對訪問元素...
關於C單鏈表的面試題(高階題)
listnode iscysle listnode list 判斷單鏈表是否帶環,返回交點 return null int getcyclelen listnode list 環的長度 count return count else listnode getcyclenenrty listnode ...