動態鏈表詳細講解_第1頁
動態鏈表詳細講解_第2頁
動態鏈表詳細講解_第3頁
動態鏈表詳細講解_第4頁
動態鏈表詳細講解_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、鏈表我自我感覺是真的很好的.對于 c 語言的一些不同類型的數據是很方便處理的.它就像一個容器 .容納著多種類型的數據.至于這個我就不說什么了.只說說我們今天的主題是鏈表的建立,刪除和添加 .至于靜態鏈表我就不說了.這個比較簡單 .動態的還是有點繞 .我也是在網上找了半天找不到什么好的自己想要的效果 .就自己寫了一段程序.我把該標記的都標記了.我相信你看了會有大的收獲的 . /* 頭文件所需要的庫文件*/ #include iostream #include stdlib.h #include stdio.h #include iomanip #define len sizeof(struct

2、student) using namespace std; void input(); struct student int number; float price; struct student *next; ; int n=0; / 全局變量定義節點數/* 創建鏈表總共有三個結構體指針分別是*head,( 頭指針標記 )*p1 (動態產生內存空間指針), *p2 (當前鏈表的指針最后一個節點)*/ struct student * creat() struct student *head,*p1,*p2; head=null; /head 返回是 void* 類型p1=p2=(struct

3、 student*)malloc(len); /p1 p2 指向同一塊內存空間即你申請的那個空間input(); /input函數接受輸入界面cinp1-numberp1-price; / 在申請的里邊輸入數據while(p1-number!=0) / 結束標記符數字0 作為輸入結束的標記 n=n+1; /n 計數器記錄你輸入記錄的個數if(n=1) / 第一個節點head=p1; / /如果是第一個節點那么就直接將其內容寫進去else p2-next=p1; / 否則即不是第一個節點,那么將指針p1 賦值 p2-next p2=p1; /p2 移動到當前位置p1=(struct studen

4、t*)malloc(len); / 重新為 p1 申請空間coutsetw(35) 輸入編號 setw(10) 輸入成績 p1-numberp1-price; / 繼續輸入看是不是輸入結束標記0 了 p2-next=null; / 如果輸入結束可以將本鏈表的指針域即p2 所在位置賦值為空。return (head); /* 下邊是打印部分由于上邊創建部分返回的是head 結構體指針, 他是你生成鏈表的頭所以在打印時他應該作為參數,所以在打印中有一個指針。他的作用大家也可以猜到了吧就是接受你的參數*/ void show(struct student *head) struct student

5、*p; p=head; / 將參數結構體指針head 給另一個結構體指針p if(head!=null) / 如果為空head 是空指針即不指向任何地方所以此處不能寫成head-next;無意義 coutsetw(50) 總共有 n條記錄 endl; / 輸出記錄總共的條數coutsetw(50) 正在輸出結果endl; while(p!=null) /因為如果為空head 是空指針所以想對應的p 也是空指針即不指向任何地方 coutsetw(50) 編號為 number 成績 pricenext; / 順序移動指針 else / 否則和上邊的if 對應鏈表為空的情況coutsetw(50)

6、此鏈表為空,沒有輸出的結果。next!=null) / 開始尋找知道你尋找到他的指針域為空 p1=p1-next; / 指針 p1 尋找自己的指針域中存儲地址地方 n=n+1; p1-next=p2; / 將你產生的節點指針p2 接到 p2 后邊p2-next=null; else / 添加之前是空 n=n+1; coutsetw(40) 你的原來鏈表為空鏈表next=null; return (head); /* 刪除節點有兩個參數一個數指針head 另一個是你要刪除的標志num 還是有兩個指針*/struct student *del(struct student *head,intnum

7、) struct student *p1,*p2; /指針 p2 指向找到的前一個指針p1=head; if(head!=null) / 此鏈表不為空 while(p1-number!=num&p1-next!=null) / 順序查找鏈表結構 p2=p1; p1=p1-next; if(p1-number=num) coutsetw(50) 找到刪除結果刪除的記錄為endl; coutsetw(50) 編號為 number 成績 pricenext=null) coutsetw(50) 你要刪除的是的是最后一條記錄next=null; coutsetw(50) 編號為 number

8、成績 pricenext=p1-next; else / 此處是沒有找到節點coutsetw(50) 沒有找到要刪除的節點。 。 。endl; else / 此處為鏈表head 為空時coutsetw(50) 你要刪除的鏈表為空不能進行刪除操作。 。 。 endl; return (head); void input() coutsetw(50)*endl; coutsetw(50)* 輸入你要輸入的記錄。 。 。 。*endl; coutsetw(50)*endl; coutendl; coutsetw(35) 輸入編號 setw(10) 輸入成績 endl; int main() struct student *head,*p; intnum; head=creat(); show(head); coutendl; coutsetw(50) 輸入你要刪除的節點num; head=del(he

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論