方法,還有迴圈鍊錶和雙鏈表的建立,學習了這幾種鍊錶,在今後的使用鍊錶中有了更多的選擇,同時也提高了解部分題目的效率。
在順序表這一方面,主要學習的是對順序表的插入和刪除操作,鍊錶也同樣是插入和刪除,再加上擴充套件的一些操作。這兩種線性表各有
其優缺點,在使用時還需要分情況考慮。
插入函式listinsert(linklist &l, elemtype e)
p1=l
p->data=e
while(p1!=null && p1->next != null)
if(p1->next->data > p->data ) //因為鍊錶有序,所以只要找到比插入數大的結點
插入p結點在p1後
return
end if
p1=p1->next
end while
p1->next=p; //插入點位於鍊錶尾
刪除函式void listdelete(linklist &l, elemtype e)
p1=l
while(p1!=null && p1->next!=null)
if (p1->next->data == e) //找到結點data域值為e的結點
刪除p1->next結點
return
end if
p1=p1->next
end while
輸出「找不到」
查詢函式find(list l, elementtype x)
for i=0 to l->last then
找到l->data[i]==x
return i
end for
插入函式insert(list l, elementtype x, position p)
if(p < 0 || p > l->last+1) return false //p指向非法位置
if( l->last == maxsize-1) return false //順序表滿
for i=l->last to p then
依次將第p個元素往後移動乙個單位
end for
l->data[p]=x
l->last++
刪除函式delete(list l, position p)
if (p < 0 || p > l->last) return false //p指向非法位置
for i=p+1 to l->last then
依次將p+1至l->last個元素像前移動乙個單位
q1:之前一直提交都是答案錯誤而且都是一分都沒有的情況但是在vs上卻可以執行
a1:在vs上可以執行,在pta裡卻是一分都沒有,之後一直以為是格式的問題,**多了或少了乙個空格,查完之後
發現格式根本沒錯誤,在看了同學的**之後發現我的動態分配記憶體的格式跟他們的不一樣,但是在vs上卻可以正
常執行,格式改完在pta上就沒問題了
while(p!=null)
index = count - m //倒數第m個,正數則是第index個
q1:第一次提交部分正確
a1:第一次在編譯器上只實現了題目中的例子,但在輸入其他數值時還有些問題,後來把count和i的值重新進行計算
就行了q2:第二次提交部分正確
a2:第二次提交在正常情況下是沒問題的,但是當index=count-m小於零時會出現錯誤,改進之後在計算index值的後
麵添上了乙個index小於零時就return -1
定義兩個指標都先指向煉表頭結點,先將第乙個指標移動至第n+1個結點,這樣一來第乙個指標跟第二個指標之間就
相差n個結點,然後同時將第乙個和第二個指標往後移動,直到第乙個指標到鍊錶的末尾,這是第二個指標所指向的
位置正好就是倒數第n個結點的位置。
DS部落格作業02 線性表
這階段學習學的是線性表,學習線性表的兩種儲存順序 鍊錶和順序表,體會了兩者儲存結構之間的區別,通過對順序表,單鏈表,雙鏈表,迴圈鍊錶,有序表的特點的了解,和學習它們的演算法設計方法,綜合運用線性表解決一些問題,在查資料時,也領悟一點單雙鏈表的在一些方面使用的優劣,對線性表的知識更加加深一點。void...
DS部落格作業02 線性表
1.2談談你對線性表的認識及學習體會 1 線性表是一種典型的線性結構,也是一種最常用的資料結構。線性表包括順序儲存結構和來鏈式儲存結構兩種,其中鏈式儲存結構的鍊錶正是上學期學過一點,在運用上的話,原理是懂了,但是運用起來還是 有點欠佳。剛開始做對鍊錶的一些操作方法有點不清楚,還有就是這學期涉及到時間...
DS部落格作業02 線性表
線性表的很多操作都有多種實現方法,在這些操作方法之間我們要盡量選擇一種最優的方法,這就對個人的思維能力有一定要求。而在對線性表進行操作時,有一些細節也要特別注意,比如說鍊錶中指標域的指向,我在對鍊錶進行操作時就經常忽略指標的指向已經改變而導致出錯。相加 等同於兩個有序鍊錶合併,只有在兩個指數相同的節...