834考綱要求:
1、概念級知識點:首尾相接的鍊錶為迴圈鍊錶。任一節點出發均就可以 找到表中其他節點,分 單向迴圈和雙向迴圈鍊錶
特殊性---當遍歷時,判空的終止條件不同,單鏈表判空-----p!=null或p->next !=null,迴圈單鏈表判空-----p!=l 或 p->next !=l
雙向迴圈鍊錶:單向鏈的指標只能向後尋查節點---單向性,雙向鍊錶訪問節點靈活,任意位置節點都可以移動指標訪問到,判空----l-next=l->prior=l;
2、基本操作:迴圈單鏈和單鏈表的增刪等操作演算法基本相同,只是記得尾節點加上最後指向頭節點的指標。故以下操作均指迴圈雙鏈
插入節點(與頭插法建立迴圈雙鏈表同+與雙鏈表插入節點同):在*p節點之後插入*q節點
q->next=p->next;
p->next->prior=q;
p->next=q;
q->prior=p;
(其中順序可換,不像單鏈表)
//簡單記:箭頭指向誰,誰就在等號右邊,這樣可以快速很多
刪除節點(與雙鏈表刪除節點同):刪除*p節點之後的節點
q=p->next;
p->next=q->next;
q->next->prior=p;
free(q);
//也可以是(上種更好)
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
3、多項式在鍊錶中(其實不難,新在乙個節點有多個資料項,用結構體解決):
實現多項式相加的演算法如下:
//結構定義:
typedef struct pnode
pnode,*polynomial;
void addpolyn(polynomial &pa,polynomial &pb)
else //和係數為0,刪掉對應節點
}else if(p1->expnexpn)
else
}//while
p3->next=p1?p1:p2; //鏈入可能剩餘的那段非空多項式的遺留項
free(pb);
}
鍊錶複習題
c或者c 實現下面的題目並測試 1.比較順序表和煉表的優缺點,說說它們分別在什麼場景下使用?2.從尾到頭列印單鏈表 3.刪除乙個無頭單鏈表的非尾節點 4.在無頭單鏈表的乙個節點前插入乙個節點 5.單鏈表實現約瑟夫環 6.逆置 反轉單鏈表 7.單鏈表排序 氣泡排序 快速排序 8.合併兩個有序鍊錶,合併...
複習 線性表習題
1.順序儲存方式插入和刪除時效率太低,因此它不如鏈式儲存方式好。x 二者各有優缺點 取元素和插入刪除 應看具體場景 2.鍊錶中的頭結點僅起到標識的作用。x 頭結點還有簡化操作的作用 3.靜態鍊錶中指標表示的是 下一元素的陣列下標 4.設乙個鍊錶最常用的操作是在末尾插入結點和刪除尾結點,則選用 d 最...
線性表 迴圈鍊錶
迴圈鍊錶的定義 將單鏈表中最後乙個資料元素的next指標指向第乙個元素,即把鍊錶的兩頭連線,形成了乙個環狀鍊錶,稱為迴圈鍊錶 在迴圈鍊錶中可以定義乙個 當前 指標,稱為游標,通過游標來遍歷鍊錶中所有元素 迴圈鍊錶和動態鍊錶相比,唯一的不同就是迴圈鍊錶首尾相連,其他都完全一樣 可以用兩次列印迴圈鍊錶,...