資料結構初步學習

2022-09-06 18:33:11 字數 2929 閱讀 8534

1. 計算遞迴演算法的時間複雜度時要分情況分步驟進行運算,計算空間複雜度時要計算遞迴深度

2. 建立鍊錶時頭結點留置放空,並且要進行動態記憶體的建立

3. 頭插法建表

void createlistf(linklist &l,int n)

}

4. 尾插法建表

void createlistr(linklist &l, int n)p->next=null;

}

5. 鍊錶的插入

q->data=e;

q->next=p->next;

p->next=q;

6. 鍊錶的刪除

q=p->next;

p->next=q->next;

delete q;

7. 棧為先進後出,隊列為先進先出,下面內容為stl--stack/queue的使用方法

stack模板類的定義在標頭檔案中。">stack模板類需要兩個模板引數,乙個是元素型別,乙個容器型別,但只有元素型別是必要的,在不指定容器型別時,預設的容器型別為deque。

定義stack物件的示例**如下:

stacks1;

stacks2;

stack的基本操作有:

入棧,如例:s1.push(x);

出棧,如例:s1.pop();注意,出棧操作只是刪除棧頂元素,並不返回該元素。

訪問棧頂,如例:s1.top()

判斷棧空,如例:s1.empty(),當棧空時,返回true。

訪問棧中的元素個數,如例:s1.size()

queue模板類的定義在標頭檔案中。

與stack模板類很相似,queue模板類也需要兩個模板引數,乙個是元素型別,乙個容器型別,元素型別是必要的,容器型別是可選的,預設為deque型別。

定義queue物件的示例**如下:

queueq1;

queueq2;

queue的基本操作有:

入隊,如例:q1.push(x); 將x接到佇列的末端。

出隊,如例:q1.pop(); 彈出佇列的第乙個元素,注意,並不會返回被彈出元素的值。

訪問隊首元素,如例:q1.front(),即最早被壓入佇列的元素。

訪問隊尾元素,如例:q1.back(),即最後被壓入佇列的元素。

判斷佇列空,如例:q1.empty(),當佇列空時,返回true。

訪問佇列中的元素個數,如例:q1.size()

8. 使用順序隊時需留有乙個位置為空,方便區分判斷隊空還是隊滿順序隊出隊後頭指標操作為front=(front+1)%maxsize順序隊入隊後尾指標操作為rear=(rear+1)%maxsize9. 串的kmp匹配模式的next[j]**

i=1,next[1]=0;j=0

while(i10. 串的kmp匹配模式的nextval[j]**

i=1,nextval[1]=0;j=0

while(i11. 二維陣列可以看作為陣列名為一維陣列的一維陣列

1.

q:剛開始在寫pta上的題目的時候通常會遇到「段錯誤」

a:記得去檢查是否有給鍊錶定義動態記憶體

2.

q:遞迴函式不會去編寫該怎麼辦

a:首先呢可以使用我們學習過的棧來代替,如果一定需要使用的話,那麼請將整個過程展開,從後往前推回去,找到合適的遞迴方式,認清每一段共同的結合方式是很重要的,然後呢再回到最前方把**整合。還要注意遞迴要有結束出口的嗷

3.

q:時間空間複雜度不會計算怎麼辦呢

a:首先時間複雜度哇我們要注重迴圈的次數和什麼有關,然後將前幾段迴圈次數的規律整合下來,撿起你高中的數學,這些一般會和什麼前n項和有關聯,記得計算公式就好了。或者嘗試去設定乙個數m為迴圈的次數,帶入計算迴圈的等式當中,就可以把一些對數指數類的時間複雜度算出來。如果遇到遞迴的話,需要列舉不同情況,然後先展開幾項遞迴式,發現之中蘊含的規律,就可以總結出來。而空間複雜度相對來說會簡單一些,我們去注重作為中間傳遞值的「工具」式的變數就好了,如果是遞迴函式的話,那麼請耐心的把遞迴式展開,或者發現遞迴展開的規律,得出遞迴的深度,就可以算出來啦。

4.

q:感覺棧好難理解怎麼辦嘞

a:初學這一塊內容的話,強烈建議要去畫圖,跟著程式一步一步畫圖這樣才方便理解,因為會有些抽象,大腦可能對資訊的總結會不夠,這個時候畫圖就會讓問題的解決更為清楚地展現在你面前,而勤加練習更是重中之重。

5.

q:串的kmp匹配模式好難理解,有什麼簡潔的解釋嗎

a:在我這裡呢,對kmp匹配模式的理解就是,在這個不匹配的字元之前的一整個串中,在字首和字尾中尋找長度內容相同的項,因為在此字元之前的內容匹配都是相同的,如果模式串開頭的一部分子串和不匹配的字元之前一段相同長度的子串相等的話,那麼就可以省去開頭相同子串的匹配,若是沒有相同則證明主串回溯也匹配不到相同串,所以主串的回溯是沒有必要的。而nextval[j]函式則是在next[j]的演算法上更進一步的差缺補漏,懂了前者,距離後者的理解也就不遠了。

資料結構導論初步理解

如今已經來到了大資料的時代,所以我們對資料的了解要更加的深刻。才可以更加理解資料這個詞所代表的含義。資料是全部被計算機儲存 處理的物件。隨著科學技術的發展。資料的含義已經從單單的數值 布林值擴充套件到了字串 聲音甚至是影象,也代表了計算機的處理能力的日新月異大發展。現實中的資料都是離散的,不規則的,...

資料結構 線段樹初步

眾所周知,線段樹是oi當中十分重要的乙個資料結構,所以我們今天就來講一講這個線段樹。首先,我們來了解一下什麼是線段樹。給定乙個1 n的區間,我們考慮,將這個區間進行二分,使得這個區 間下擁有兩個小區間,如此反覆操作,直至這個區間被二分的只剩下乙個點,那麼這就是這棵線段樹的葉節點,線段樹的實質上是一顆...

對於資料結構的初步了解

對於資料結構在我沒學這門課程之前對它的理解是 資料結構是可以把很多資料整合到一起,然後寫乙個適合處理這批資料的演算法,這樣可以節省計算機的記憶體。但是學完第一章緒論後我對這門課有了更深刻的理解。首先是對資料結構的組成有了了解 1.資料的邏輯結構 2.資料的儲存結構 3.資料的運算 邏輯結構的表示 1...