資料結構複習整理(易混點 易忘點)

2021-07-11 06:40:50 字數 1587 閱讀 2714

一、時間複雜度計算

二、關於鍊錶

1、頭指標與頭結點區別:

頭指標:頭指標是指鍊錶指向第乙個結點的指標,若煉表有頭結點,則是指向頭結點的指標。

注:無論鍊錶是否為空,頭指標均不為空。頭指標是鍊錶的必要元素。

頭結點:頭結點是為了操作的統一和方便而設立的。放在第一元素的結點之前,其資料域一般無意義(也可存放鍊錶的長度)。

注:有了頭結點,對在第一元素結點的插入結點和刪除第一結點,其操作與其他結點的操作就統一了。

頭結點不一定是鍊錶必須要素。

struct node first;

first.next = &one;                   //first為頭結點

struct node *head = &first;               //頭指標

2、記憶體管理   new/delete       malloc/free     括號必須配對

區別:①new/delete是c++裡才有的,而new/delete與malloc/free乙個顯著的區別在於,new是建造乙個物件,並呼叫物件的建構函式來初始化物件,其實在所有的new操作過程中,總是分為兩步的:一步是申請記憶體,第二步則是呼叫建構函式初始化物件。同樣,在呼叫delete的時候,需先呼叫析構函式,然後再銷毀堆記憶體。

②new/delete通常來說是操作符,可以過載,過載之後就成了函式,而malloc/free是庫函式。

③malloc得到的指標是void *型的,必須要強轉才能成為需要的型別。

④c++預設的new/delete操作符內部,其實也呼叫了malloc/free這兩個函式。

⑤如果用free釋放"new建立的動態物件",那麼該物件因無法執行析構函式而可能導致程式出錯。

共同:都可以釋放null指標。

3、關於資料結構中用到的c++中的知識點:

①引用:為目標變數取別名,不另外分配空間;

②輸入輸出:cin、cout、及標頭檔案;

③命名空間:using namespace std;

4、關於malloc位址不夠時,使用realloc重新分配記憶體(使用malloc和realloc都要  #include )

realloc是對malloc申請的記憶體進行大小的調整。申請的記憶體同樣需要用free()來釋放。

void *realloc(void *ptr, unsigned newsize);    //給乙個已經分配了位址的指標重新分配空間,引數ptr為原有的空間位址,newsize是重新申請的位址長度。

realloc是從堆上分配記憶體的,當擴大一塊記憶體空間時,realloc()試圖直接從堆上現存的資料後面的那些位元組中獲得附加的位元組,如果資料後面的位元組不夠,問題就出來了,那麼就使用堆上第乙個有足夠大小的空閒塊,現存的資料然後就被拷貝到新的位置,而老塊則放回到堆上的空閒塊中。如果重新分配成功則返回指向被分配記憶體的void型別指標,否則返回空指標null。

在順序表的插入元素函式中,當儲存空間已滿,就要增加分配,這時:

newbase = (elemtype *)realloc(l.elem,(l.listsize + listincrement) * sizeof(elemtype));

C 繼承易忘點

三種繼承的特點 public 繼承時保持基類中各成員的屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public protected成員,而不能訪問private成員 private 繼承時基類中各成員屬性均變為private,並且基類中的private成員被隱藏。派生類...

Jquery複習(一)之animate 易忘點

是的,幾乎可以!不過,需要記住一件重要的事情 當使用 animate 時,必須使用 camel 標記法書寫所有的屬性名,比如,必須使用 paddingleft 而不是 padding left,使用 marginright 而不是 margin right,等等。同時,色彩動畫並不包含在核心 jqu...

CSS總結之易錯易忘點

一,清除浮動 二,設定margin 0 auto 後,元素仍不居中 一,clear float 作為乙個前端菜鳥,常常在為了讓兩個div水平排列,或者想讓一些元素在其父元素框內靠左或靠右時,使用css float 屬性。而又常常因為忘記 清除浮動 而導致看到自己做出來介面時,實力懵逼加不解,這才知道...