1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          c語言鏈表詳解(C語言中鏈表的示例分析)

          來源:互聯網轉載 時間:2024-05-11 13:59:58

          C語言鏈表詳解附實例

          什么是鏈表

          鏈表是一種常見的重要的數據結構。它是動態地進行存儲分配的一種結構。鏈表和數組比較,不用事先確定存儲空間,而是根據需要開辟內存單元。
          下圖1是最簡單的一種鏈表(單向鏈表)的結構

          第 0 個結點稱為頭結點,它存放有第一個結點的首地址,它沒有數據,只是一個指針變量。以下的每個結點都分為兩個域,一個是數據域,存放各種實際的數據,如學號 num,姓名 name,性別 sex 和成績 score 等。另一個域為指針域,存放下一結點的首地址。鏈表中的每一個結點都是同一種結構類型。

          環境構建

          用的Visual Studio 2019軟件

          在源文件中添加C文件

          建立靜態鏈表

          包含所需要的頭文件

          #include<stdio.h>//標準輸入輸出頭文件#include<stdlib.h>//包含了C、C++語言的最常用的系統函數

          宏定義相關變量

          #defineLENsizeof(structStudent)//宏定義節點長度得命名#defineTYPEstructStudent//宏定義結構體變量命名

          創建一個結構體

          structStudent//定義一個學生類型結構體,包括學號,分數{longnum;floatscore;structStudent*next;//next是指針變量,指向結構體變量};//指向結構體對象得指針變量既可以指向結構體變量,也可以指向結構體數組中得元素

          主函數

          intmain(){TYPE*head,*p;//定義頭指針structStudenta,b,c;//定義三個結構體變量a.num=101;a.score=20;//分別對三個結點賦值b.num=102;b.score=20;c.num=103;c.score=20;/*1、A.B則A為對象或者結構體2、A->B則A為指針,->是成員提取,A->B是提取A中的成員B,A只能是指向類、結構、聯合的指針;*/head=&a;a.next=&b;b.next=&c;c.next=NULL;p=head;//把首地址給變量do{printf("%ld%5.1f\n",p->num,p->score);//輸出每個結點信息p=p->next;//使P指向下一個結點}while(p!=NULL);//直到指針域指向空值return0;}

          結果展示

          說明

          將第一個結點的起始地址賦值給頭指針head,將第二個結點的起始地址賦值給第一個結點的next成員,將第二個結點的起始地址賦給第一個結點的next…第三個結點的next賦值為NULL,這就形成了簡單的鏈表。

          建立動態鏈表

          所謂建立動態鏈表是指在程序執行過程中從無到有地建立起一個 鏈表,即一個一個地開辟結點和輸入各結點數據,并建立起前后相連的關系。

          包含所需要的頭文件

          #include<stdio.h>//標準輸入輸出頭文件#include<stdlib.h>//包含了C、C++語言的最常用的系統函數#include<malloc.h>//動態存儲分配函數頭文件

          宏定義相關變量

          #defineLENsizeof(structStudent)//宏定義節點長度得命名#defineTYPEstructStudent//宏定義結構體變量命名

          創建一個結構體

          structStudent//定義一個學生類型結構體,包括學號,分數{longnum;floatscore;structStudent*next;//next是指針變量,指向結構體變量};//指向結構體對象得指針變量既可以指向結構體變量,也可以指向結構體數組中得元素

          建立鏈表函數

          TYPE*Creat(void)//定義函數,此函數返回一個指向鏈表頭的指針{TYPE*head;//定義頭指針TYPE*p1,*p2;//定義兩個指針變量用來相互保存number=0;//開始時,結點清零p1=p2=(TYPE*)malloc(LEN);//創建存儲空間printf("請按格式輸入學生學號,分數\n");//輸出提示信息printf("例如101,1并以0,0結束\n");scanf("%ld,%f",&p1->num,&p1->score);//按格式輸入第一個結點的信息head=NULL;//第一個結點頭指針賦空值while(p1->num!=0)//循環直到輸入學生學號為0,就結束{number++;//結點自增if(number==1)//如果只有一個結點,那么頭指針指向第一個輸入的結點head=p1;elsep2->next=p1;//如果大于1個,那么要用next保存前一個結點的信息p2=p1;//保存前一個結點信息p1=(TYPE*)malloc(LEN);//開辟新的結點scanf("%ld,%f",&p1->num,&p1->score);//輸入下一個結點信息}p2->next=NULL;//循環結束,將指向信息賦空值return(head);//返回首地址}

          主函數

          intmain(){TYPE*pt;//定義一個結構體指針變量pt=Creat();//函數返回鏈表第一個結點的地址printf("\nnum:%ld\nscore:%5.lf\n",pt->num,pt->score);//輸出第一個結點的成員值return0;}

          結果展示

          == 文中最后結果顯示的是第一個結點的內容,作為有強大功能的鏈表,對他的操作當然有許多,比如:鏈表的創建,修改,刪除,插入,輸出,排序,反序,清空鏈表的元素,求鏈表的長度等等。==

          鏈表的輸出

          用循環直接可以輸出鏈表

          輸出函數

          voidprint(TYPE*head){TYPE*p;//定義指針printf("\nNOWThese%drecordsare:\n");//輸出顯示信息p=head;//使p指向第一個結點if(head!=NULL)//輸出第一個結點后的信息do{printf("%ld%5.1f\n",p->num,p->score);p=p->next;//指向下個結點}while(p!=NULL);}

          主函數

          intmain(){TYPE*pt;//定義一個結構體指針變量pt=Creat();//函數返回鏈表第一個結點的地址print(pt);//輸出調用return0;}

          鏈表的修改

          修改函數

          修改鏈表節點值很簡單。下面是一個傳入鏈表和要修改的節點,來修改值的函數.

          voidchange(TYPE*head,intn)//修改指定位置的結點的信息{TYPE*p=head;//傳入首地址inti=0;while(i<n&&p!=NULL){p=p->next;i++;}//找到相應的位置結點if(p!=NULL){printf("輸入要修改的值\n");scanf("%ld,%f",&p->num,&p->score);//輸入下一個結點信息}elseprintf("節點不存在\n");}

          主函數

          intmain(){TYPE*pt;//定義一個結構體指針變量pt=Creat();//函數返回鏈表第一個結點的地址change(pt,2);//修改相關結點的信息,假設修改第2+1個print(pt);//輸出調用return0;}

          ##鏈表的刪除

          刪除鏈表的元素也就是把前節點的指針域越過要刪除的節點指向下下個節點。即:p->next = q->next;然后放出q節點的空間,即free(q);

          刪除函數

          voiddelet(TYPE*head,intn){TYPE*p=head,*in;//定義兩邊指針inti=0;while(i<n&&p!=NULL){in=p;//找到左邊的p=p->next;//找到右邊的i++;}if(p!=NULL){in->next=p->next;//將左右鏈接free(p);//釋放中間結點}else{printf("節點不存在\n");}}

          主函數

          intmain(){TYPE*pt;//定義一個結構體指針變量pt=Creat();//函數返回鏈表第一個結點的地址delet(pt,1);//刪除第1+1個結點print(pt);//輸出調用return0;}

          輸出結果

          ##鏈表的插入
          我們可以看出來,插入節點就是用插入前節點的指針域鏈接上插入節點的數據域,再把插入節點的指針域鏈接上插入后節點的數據域。根據圖,插入節點也就是:e->next = head->next; head->next = e;
          增加鏈表節點用到了兩個結構體指針和一個int數據。

          插入函數

          voidinsert(TYPE*head,intn){//鏈表的插入TYPE*p=head,*in;inti=0;while(i<n&&p!=NULL){p=p->next;i++;//找到相應結點}if(p!=NULL){in=(TYPE*)malloc(sizeof(TYPE));//開辟新的空間printf("輸入要插入的值\n");scanf("%ld,%f",&in->num,&in->score);//輸入新的結點信息in->next=p->next;//填充in節點的指針域,也就是說把in的指針域指向p的下一個節點p->next=in;//填充p節點的指針域,把p的指針域重新指向in}else{printf("節點不存在\n");}}

          主函數

          intmain(){TYPE*pt;//定義一個結構體指針變量pt=Creat();//函數返回鏈表第一個結點的地址insert(pt,1);//從1+1后插入print(pt);//輸出調用return0;}

          結果顯示

          出現的問題

          1、出現scanf 和printf 在VS2019中使用時會出錯,解決辦法如下

          最后是測試的所有源程序

        1. c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          2022年4月20日消息,騰訊旗下休閑娛樂游戲《QQ堂》將正式停止中國大陸地區的運營。這款游戲將于今日11點關閉服務器,屆時玩家將不能正常登錄游戲。同時,游戲服務器的官網、論壇、專屬客服也均關閉?!禥Q堂》于2004年12月29日推出,是騰訊的大型游戲處女作,至今已運營逾17年,曾是很多人的童年。2021年12月,《QQ堂》因項目組戰略計劃,宣布停運。消息一出一度沖上熱搜,不少網友紛紛直呼,&ld...

          黃金價格為什么下跌?1.美元指數開始走強。黃金和美元的關系通常是相反的。貨幣危機結束了黃金失去了作為避險工具的意義,所以很多人放棄了黃金,持有美元。如果美元指數走強黃金的價格可能會下跌。2.需求下降導致黃金價格下降。世界上有三個國家特別喜愛黃金。俄羅斯把黃金作為它的資產儲備,印度把黃金作為它的珠寶,中國買下黃金作為壓箱底傳給后代。如果黃金的需求突然減少黃金的價格就會下跌。如果需求增加黃金價格就會上...

          僵尸也被稱為活尸和活死人。他們是傳說中的怪物,可以像死人一樣移動。來自非洲的伏都教信仰也出現在現代文學作品中。僵尸類似于吸血鬼,屬于不死生物。真正讓僵尸電影出彩的是羅梅羅,他的《活死人之夜》讓僵尸遠離伏都教,變成了一個全新形象的怪物。正是因為這部電影的出現,僵尸成為了現代恐怖電影的新寵。下面為大家奉上10部僵尸電影。保存列表。慢慢來。絕對值得一看。(我覺得是個不錯的推薦。注意一下。邊肖會經常推薦好...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>