資料結構隨筆

2021-05-24 23:04:58 字數 2068 閱讀 7582

在前一段學習的資料結構中,我感覺對於鍊錶的知識有些遺忘,其實終究看來是c語言知識的遺忘,下面我將借助以下幾個詳細的例子,來看看我們相關的的結構體指標與鍊錶。其實在我看來,我一直感覺結構體是類的雛形,沒有成型的類,備受限制而又非常開放的類。下面我們還是以煉表為例:

單鏈表:

(1)頭指標變數head──指向鍊錶的首結點。

(2)每個結點由2個域組成:

資料域──儲存結點本身的資訊。

指標域──指向後繼結點的指標。

(3)尾結點的指標域置為「null(空)」,作為鍊錶結束的標誌。

對於資料的操作無外乎是由「增,刪,改,查」四項功能來組合而成的,真有點像人與「衣,食,住,行」的關係。

對鍊錶的基本操作

對鍊錶的基本操作有:建立、遍歷(查詢)、插入、刪除等。

(1)建立鍊錶是指,從無到有建立起鍊錶,即往空煉表中依次插入若干結點,並保持結點之間的前驅和後繼關係。

(2)遍歷鍊錶是指,查詢鍊錶上所有結點。

(3)插入結點是指,在結點ki-1與ki之間插入乙個新的結點k』,使線性表的長度增1,且ki-1與ki的邏輯關係發生如下變化:

插入前,ki-1是ki的前驅,ki是ki-1的後繼;插入後,新插入的結點k』成為ki-1的後繼、ki的前驅。

(4)刪除結點是指,刪除結點ki,使線性表的長度減1,且ki-1、ki和ki+1之間的邏輯關係發生如下變化:

刪除前,ki是ki+1的前驅、ki-1的後繼;刪除後,ki-1成為ki+1的前驅,ki+1成為ki-1的後繼。

例項展示:

struct  node//建立結構體 ;

下面我們來建立乙個新鍊錶

基本思路:

首先向系統申請乙個結點的空間,然後輸入結點資料域的(2個)資料項,並將指標域置為空(鏈尾標誌),最後將新結點插入到鍊錶尾。對於鍊錶的第乙個結點,還要設定頭指標變數。

另外,案例**中的3個指標變數phead、pnew和ptail的說明如下:

(1)phead──頭指標變數,指向鍊錶的第乙個結點,用作函式返回值。

(2)pnew──指向新申請的結點。

(3)ptail──指向鍊錶的尾結點,用ptail->next=pnew,實現將新申請的結點,插入到鍊錶尾,使之成為新的尾結點。

/*createtab()函式: 建立鍊錶*/

/*形參:int n 結點的個數*/

/*返回值:返回鍊錶的頭指標*/

struct node *createtab( int n )

return(phead);/*返回煉表頭指標*/

}/*遍歷鍊錶*/

void findtab(struct node *p)

}對鍊錶的插入操作

編寫乙個insert()函式,完成在單鏈表的第i個結點後插入1個新結點的操作。當i=0時,表示新結點插入到第乙個結點之前,成為鍊錶新的首結點。

基本思路:

通過鍊錶的頭指標,首先找到鍊錶的第乙個結點;然後順著結點的指標域找到第i個結點,最後將新結點插入到第i個結點之後。

/*函式功能:在單鏈表的第i個結點後插入1個新結點*/

/*函式引數:phead為鍊錶的頭指標,pnew指向要插入的新結點,i為結點索引號*/

/*函式返回值:鍊錶的頭指標*/

struct node *insert(struct node *phead, struct node *pnew, int i)

return(phead);

}對鍊錶的刪除操作

編寫乙個delete()函式,刪除鍊錶的指定結點。

基本思路:

通過鍊錶的頭指標,首先找到鍊錶的結點;然後順著結點的指標域找到第i個結點,最後將新結點插入到第i個結點之後。

/*函式功能:刪除鍊錶的某個結點*/

/*函式引數:phead為鍊錶的頭指標,pdel指向要刪除的結點*/

/*函式返回值:若刪除成功返回1,否則返回0*/

int delete(struct node *phead, struct node *pdel)

temp->next=pdel->next;/*找到要刪除的結點後*/

}free(pdel);/*釋放被刪除結點的記憶體空間*/

return(1);

}

資料結構套路隨筆

用線段樹可以維護區間最大值的字尾和,值得一提的技巧是可以在合併兩個快的時候向乙個塊下面遞迴,然後資訊就可以合併了。但是時間複雜度由於每次合併都要向下遞迴,所以多出乙個log。眾多樹形資料結構都可以啟發式合併,包括ac自動機也可以。具體做法是新建log快aca,每當兩塊大小相同時就合併。複雜度log。...

資料結構與演算法分析 隨筆2

includeusing namespace std n的二進位制數中1的個數 n是奇數的話,它等於n 2的二進位制表示中的1的個數加1 int ones int n return 1 int main size t size sizeof a sizeof int vectorvec a,a si...

c程式與資料結構隨筆整理

以前,隨筆沒有分類,有些東西查閱起來就不那麼方便了,現在整理一下。c程式 大多數是是課程設計時寫的 判斷是否回文字串 02 15 17 05 單鏈表的交並差 c 語言 資料結構 07 23 22 19 遞迴下降語法分析程式 07 07 22 41 四則運算實現 c 語言 資料結構課程設計題 02 2...