你對本章內容的小結
完成作業或實踐時解決困難的經驗分享
這段時間,你參考了哪些值得向大家分享的資料?每一項推薦都請說明推薦理由及列出相關鏈接(或書目名稱,具體頁碼)
目前學習過程中存在的困難,待解決或待改進的問題
上次博客確定的目標達到了嗎?如果沒達到,請分析原因
接下來的目標
首先總結一下學習的知識吧。
(一)初始化
順序表:為順序表分配一個大小確定的數組空間,空表時長度為0;
鏈表:構造一個空的單鏈表L,用頭指針指向頭結點,頭結點的指針域置空(L = new LNode; L->next = NULL;)
(二)取值
順序表:先判斷序號值是否合理,若合理,則e = L.elem[ i - 1 ] ;
鏈表:用指針p指向首元結點,用j做計數器初值賦為1,從首元結點開始依次順着鏈域next向下訪問
p=L->next; j=1;
while(p&&j<i)
{ p=p->next; ++j; }
e = p->data;
(三)查找(按值查找)
順序表:從第一個元素起,依次與待查找數比較,時間復雜度為O(n)
for( int i=0; i<n; i++ )
if( L.elem[i]==e) return i+1;
鏈表:用指針p指向首元結點,從首元結點開始依次順着鏈域next向下訪問,時間復雜度為O(n)
p=L->next;
while( p && p->data != e ) p=p->next;
(四)插入(在第i個位置插入新的元素e)
順序表:將第n個至第i個位置依次向后移動一個位置,空出第i個位置,將元素e放入第i個位置,表長加1,時間復雜度為O(n)
for( int j=L.length - 1; j>=i -1; j-- ) L.elem[ j+1]=L.elem[ j ];
L.elem[ i -1 ]=e;
++L.length;
鏈表:先查找到第i-1個結點,再將值為e的新結點插入到結點a(i-1)和a(i)之間,時間復雜度為O(n)
p = L; j = 0;
while( p && j<i-1 ) { p=p->next; ++j; }
s = new LNode; s->data=e;
s->next = p->next; p->next = s;
(五)刪除
順序表:先判斷位置i是否合理,若合理,則將被刪除元素之后的元素前移,表長減1,時間復雜度為O(n)
for( j=i; j<=L.length-1; j++ ) L.elem[ j-1]=L.elem[ j ];
--L.length;
鏈表:先查找到第i-1個結點,臨時保存被刪除結點的地址以備釋放,改變刪除結點前驅結點的指針域,釋放刪除結點的指針域,時間復雜度為O(n)
while( p && j<i-1 ) { p=p->next; ++j; }
q=p-<next; p->next = q->next;
其次說一下我自己的感受吧。
其實說是真的,上個學期其他的知識我學的都挺好的,可是C++不會,學不懂。這學期也是,其他的知識我也都會,但是就是不會數據結構。這些知識點我也整理出來。可是我還是不會用,對此一竅不通。我原來就聽說過,這學期的數據結構一定要好好學,這是以后的基礎,一定會用得到的,而且也聽說C++學不好,以后的JAVA也學不好,我覺得我與這個計算機無緣了。曾經立下的雄心壯志也無法實現了吧。中間想了很多,我以為只要我夠努力就可以學得好,其實並不如我想象的那么簡單,越不會越不會,因為感覺自己好丟人,別人都是深奧的問題,可是我卻還停留在原地一動不動。想想自己好慘哦,哈哈哈。
我遇到的困難好多哦,看到我說的這些話都應該了解了吧,一開始別人說我學不明白是因為邏輯思維不好,可是我離散數學學的挺好的,就像我高中,別人說數學學得好物理就能好,可是我的物理並不是太好。我不知道該如何去做因為這本不是我真正的選擇,我真的不知道自己還能堅持多久,希望好久之后回頭看一下我的博客,能有所進步,有所改變吧。
完成作業時遇到不僅僅是困難了,已經算是災難了吧,我提交的很晚,因為我真的做了好久,最后還去網上尋找了一點答案,真的是想不明白,而且不會寫,就算自己明白怎么做,但是寫起代碼就不知道從何下手。實踐提交了一遍又一遍都沒過,真的很挫敗,這些從來不像對別人說,但是一旦寫在上面,肯定會有人看到的,我寫在這里也是希望某一天回頭看看能看到自己的成長。
那就這樣吧,沒有成功過的喜悅,只有遺憾的語氣,希望我可以堅持的久一點,更希望可以找到自己的方法去完成它。
替我加油吧!