單向鍊錶中26個英文本母的錄入
void build()
p->data = 'z';/*最後乙個字母z單獨處理*/
p->next = null;/*z為尾結點,無next,單獨處理指標域*/
}
以上為子函式部分,輸出部分如下
void display()
}
問題:如果要求計數有多少個字元。
回答:將輸出行改為用count計數。
刪除(*p)節點的直接後繼節點
ps:要讓預刪除的節點成為游離節點
q = p->next;/*使q等同p後繼節點*/
p->next = p->next->next;/*使p指標域指向p後繼節點志向與指向的節點*/
free(q);/*釋放要刪除的節點的空間*/
存在問題(尚未解決):釋放空間的操作是否可以先進行?
如何刪除(*p)結點本身?
方法一:從head開始依次尋找q結點使得q->next = p;
方法二:不從head開始,直接從*p結點起手
p->data = p->next->data;/*後繼節點資料替代p結點*/
q = p->next;/*使q等於要釋放的結點*/
p->next = q->next;/*使p結點指向原p結點的後繼節點的後繼節點*/
free(q)l/*釋放空間*/
找前驅法:新概念->雙向鍊錶(有前後雙指標的鍊錶)
雙向鍊錶的後插法:
s->prior = p;
s->next = p->next;
p->next->prior = s;
p->next = s;
雙向鍊錶後插法:
s->next = p;
s->prior = p->prior;
p->prior = s;
s->prior->next = s;
雙向鍊錶的刪除:
q = p;
p->prior->next = p->next;
p->next->prior = p->prior;
free(q);
帶頭節點的空雙向鍊錶樣式:head->q
頭指尾,尾指頭,(偽迴圈鍊錶 ?)
上課額外內容:
單鏈表的讀取(或修改)
難點:單鏈表中想取得第i個元素,必須從頭指標出發尋找(順藤摸瓜),不可隨機訪問。
datatype get(linklist *l, int i)
if(!p||j>i) return null;
e = p->data;
return e;
}
順序儲存和鏈式儲存各有哪些優缺點?
答:順序儲存的優點是儲存密度大(密度為1),儲存空間利用率高。缺點是插入和刪除元素時不方便。
鏈式儲存的優點是插入或刪除元素時很方便,使用靈活。缺點是儲存密度小(密度小於1),儲存空間利用率低。
事實上,鍊錶插入、刪除運算的快捷是以空間代價來換取時間。
什麼情況下用順序錶比鍊錶好?
答:順序表適宜於做查詢這樣的靜態操作;鍊錶宜於做插入、刪除這樣的動態操作。
感謝演算法老師,讓我大概理解了鍊錶的工作流程,日後自己要繼續努力!
資料結構學習之佇列 C語言
資料結構學習之佇列 c語言 佇列 queue 也是存放資料物件的一種容器,其中的資料物件也按線性的邏輯次序排列。佇列結構同樣支援物件的插入和刪除,但兩種操作的範圍分別被限制於佇列的兩端,若約定新物件只能從某一端插入其中,則只能從另一端刪除已有的元素。允許取出元素的一端稱作隊頭 front 而允許插入...
C語言資料結構學習 順序表
include include define size 5 typedef struct sequencetable sequencetable brief 初始化順序表 return sequencetable sequencetable inittable st.length 0 st.size...
c 資料結構學習筆記
c 資料結構學習筆記 1 關於類的建構函式 在建構函式前加上explict關鍵字 就可以使建構函式只可以顯式呼叫,而不可以隱式呼叫。下面的例子說明的很清楚 classtest1 普通建構函式 private int num classtest2 explicit 顯式 建構函式 private in...