c語言資料結構學習

2021-10-01 02:16:19 字數 1716 閱讀 5379

單向鍊錶中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...