4-18 易錯點 鏈表的創建和添加

来源:https://www.cnblogs.com/xgmzhna/archive/2019/04/18/10732923.html
-Advertisement-
Play Games

今天學習了鏈表內的創建和添加,先總結一下我犯的錯誤 先上代碼 代碼註釋: 思路分析: 本次練習首先是數據結構中簡單鏈表中單個結點的創建,經過分析可得,若是想要在程式運行的過程當中進行創建添加操作: 鏈表簡單的添加,此處的添加分為兩種情況: 程式中原先若是有鏈表已經出現,那麼頭指針是指向第一個結點可以 ...


  今天學習了鏈表內的創建和添加,先總結一下我犯的錯誤

  1. 二級指針理解不深刻,導致傳參之後,實參的值並沒有變化;
  2. 符號優先順序沒有記熟練,導致寫完之後會出現很多語法問題;

先上代碼

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 typedef struct NODE
 5 {
 6     int id;
 7     char *name;
 8     char *tel;
 9     struct NODE *next;
10 }Node;
11 Node *GetNode(int id,char *name,char *tel);
12 void addNode(Node **ppHead,Node **ppEnd,Node *pNode);
13 int main()
14 {
15     Node *pHead = NULL;     //1
16     Node *pEnd = NULL;
17 
18     addNode(&pHead,&pEnd,GetNode(1,"cyc","164864613521"));
19     addNode(&pHead,&pEnd,GetNode(2,"xmx","164864613521"));
20     addNode(&pHead,&pEnd,GetNode(3,"wdh","164864613521"));
21     addNode(&pHead,&pEnd,GetNode(4,"yk","164864613521"));
22 
23     while(pHead != NULL)
24     {
25         printf("%d    %s    %s\n",pHead->id,pHead->name,pHead->tel);
26         pHead = pHead->next;
27     }
28 
29 
30 
31     return 0;
32 }
33 Node *GetNode(int id,char *name,char *tel)
34 {
35     Node *pTemp = (Node *)malloc(sizeof(Node));
36     pTemp->id = id;
37     pTemp->name = name;
38     pTemp->tel = tel;
39     pTemp->next = NULL;
40 
41     return pTemp;
42 }
43 void addNode(Node **ppHead,Node **ppEnd,Node *pNode)   // 2
44 {
45     if(*ppHead == NULL)
46     {
47         *ppHead = pNode;
48         *ppEnd = pNode;
49     }
50     else
51     {
52         (*ppEnd)->next = pNode;
53         *ppEnd = pNode;
54     }
55     return;
56 
57 }

代碼註釋:

  1. 此處設置的頭指針和尾指針是便於添加結點;
  2. 函數傳參,若想對傳入參數的值進行改變的話,應該使用地址傳遞,反之,使用值傳遞(在這個練習當中,我想改變指針的值,所以採用地址傳遞,而二級指針正好是用來存儲指針的地址)

思路分析:

  本次練習首先是數據結構中簡單鏈表中單個結點的創建,經過分析可得,若是想要在程式運行的過程當中進行創建添加操作:

  1. 應該在堆區申請空間,因為棧區在程式運行後大小不可變化,並且會隨著自定義函數的結束而消亡,造成信息的損失;
  2. 傳入參數有多種形式,我採用的是直接傳入,也可以採用scanf()即時輸入的方式。

 

  鏈表簡單的添加,此處的添加分為兩種情況:

  1. 程式中並未有鏈表出現,那麼遍歷後 頭指針pHead = 0就可以判斷,那麼頭指針指向添加的結點,尾指針也指向添加的結點即可;

程式中原先若是有鏈表已經出現,那麼頭指針是指向第一個結點可以不變,此時尾指針所指向結點內所存儲的 pnext 就可以指向添加的結點,然後繼續把尾指針指向最後一個結點。

 

2019-04-18 22:37:16 編程小菜鳥反思,大佬勿噴 謝謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 關於SpringMVC頁面向Controller傳參的問題,看了網上不少帖子,大多總結為以下幾類: 1、直接把頁面表單中相關元素的name屬性對應的值作為Controller方法中的形參。 這個應該是最直接的,我看的那本書從百度的編輯器中取內容content時就直接用的這個方法: 2、通過@Requ ...
  • 一、什麼是進程 進程(Process)是電腦中的程式關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。在早期面向進程設計的電腦結構中,進程是程式的基本執行實體;在當代面向線程設計的電腦結構中,進程是線程的容器。程式是指令、數據及其組織形式的描述,進程是程 ...
  • In many programming competitions, we are asked to find (or count the number of) Prime Factors of an integer i. This is boring. This time, let’s count ...
  • 字元串是一種非常重要的數據類型,但是C語言不存在顯式的字元串類型,C語言中的字元串都以字元串常量的形式出現或存儲在字元數組中。同時,C 語言提供了一系列庫函數來對操作字元串,這些庫函數都包含在頭文件 string.h 中。 一、字元串常量和字元數組 1.1、什麼是字元串常量 C 語言雖然沒有字元串類 ...
  • ConcurrentSkipListSet的底層是ConcurrentSkipListMap嗎? ConcurrentSkipListSet是線程安全的嗎? ConcurrentSkipListSet是有序的嗎? ConcurrentSkipListSet和之前講的Set有何不同? ...
  • 0. 前言 接著上一篇 "博客" 的內容,我將繼續介紹Python相關的語法。部分篇章可能不只是簡單的語法,但是對初學者很有幫助,也建議讀懂。 1. 表達式 由數字、符號、括弧、變數等組成的組合。 算術表達式 邏輯表達式 賦值表達式 在Python中,變數無需實現聲明,也不需要指定類型。 在Pyth ...
  • 1、列印在左上角 預覽: 2、列印在左下角 預覽: 3、列印在右上角: 預覽: 4、列印在右下角: 預覽: ...
  • 上一節是把大概的流程給過了一遍,但是還有很多地方沒有說到,後續的慢慢會涉及到,敬請期待! 這次我們說說垃圾收集器,又名gc,顧名思義,就是收集垃圾的容器,那什麼是垃圾呢?在我們這裡指的就是堆中那些沒人要的對象。 1.垃圾收集器的由來 為什麼要有垃圾收集器啊?不知道有沒有想過這個問題,你說我運行一個程 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...