在前一段學習的資料結構中,我感覺對於鍊錶的知識有些遺忘,其實終究看來是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...