找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3326|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單向鏈表應(yīng)用 單向鏈表創(chuàng)建,節(jié)點(diǎn)插入,增加,數(shù)據(jù)填充等源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
實(shí)現(xiàn)了單向鏈表的創(chuàng)建,節(jié)點(diǎn)插入,增加,數(shù)據(jù)填充等


源程序:
  1. //單向鏈表基本操作,包括創(chuàng)建,整體賦值,整體讀取,單個賦值,單個讀取等
  2. //已經(jīng)在VC6.0上運(yùn)行通過
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5. typedef struct DataBuf
  6. {
  7.    char  Byte8;
  8.    int   Byte16;
  9.    long  Byte32;
  10. }DataBuf;
  11. DataBuf readbuf;
  12. //鏈表節(jié)點(diǎn)和要存儲的數(shù)據(jù)申明,要插入的數(shù)據(jù)都在這里添加即可
  13. typedef struct SingleListNode
  14. {
  15.    //要插入的鏈表數(shù)據(jù)值
  16.    char         Byte8;               //要插入數(shù)據(jù)(1byte)
  17.    int          Byte16;              //要插入數(shù)據(jù)(2byte)
  18.    long         Byte32;              //要插入數(shù)據(jù)(4byte)
  19.    struct SingleListNode *next;      //每個鏈表的節(jié)點(diǎn)
  20. }SingleListNode;
  21. typedef SingleListNode *SingleList;  //鏈表指針類型定義
  22. /***********************************
  23. ** 名稱:      SingleListNodeCreate
  24. ** 描述:       創(chuàng)建單向鏈表表頭節(jié)點(diǎn)
  25. ** 輸入?yún)?shù):   無
  26. ** 輸出參數(shù):   無
  27. ** 返回值:     鏈表頭指針
  28. *************************************/
  29. SingleList SingleListNodeCreate (void)
  30. {
  31.    SingleList pHead = (SingleList)malloc(sizeof(SingleListNode));  //為鏈表表頭分配內(nèi)存空間,創(chuàng)建后次鏈表表頭將永遠(yuǎn)不會消失,地址賦給表頭指針
  32.    pHead->next=NULL;     //指針頭賦值為空
  33.    return pHead;         //返回鏈表表頭
  34. }
  35. /**************************************************************************
  36. ** 名稱:       SingleListInsert
  37. ** 描述:       單向鏈表插入數(shù)據(jù)運(yùn)算
  38. ** 輸入?yún)?shù):   SingleList pos: 要插入的鏈表表頭節(jié)點(diǎn)
  39.                byte  :    要插入的數(shù)據(jù)
  40.                           
  41. ** 輸出參數(shù):   無
  42. ** 返回值:     插入節(jié)點(diǎn)的指針
  43. ****************************************************************************/
  44. SingleList SingleListInsert(SingleList pos, char byte8,int byte16,int byte32)
  45. {
  46.         SingleList ptr = (SingleList)malloc(sizeof(SingleListNode)); //為新創(chuàng)建的鏈表節(jié)點(diǎn)分配內(nèi)存
  47.         ptr-> Byte8    = byte8;        //插入數(shù)據(jù)
  48.         ptr-> Byte16   = byte16;              
  49.         ptr-> Byte32   = byte32;
  50.         ptr->next      = pos->next;    //指向下一個節(jié)點(diǎn)的
  51.         pos->next      = ptr;          //把創(chuàng)建的節(jié)點(diǎn)指針傳給下一個節(jié)點(diǎn)。用于移動節(jié)點(diǎn)
  52.         return ptr;    //返回創(chuàng)建的鏈表節(jié)點(diǎn)的指針
  53. }
  54. /**************************************************************************
  55. ** 名稱:      TargetNodeWriteData
  56. ** 描述:       向目標(biāo)節(jié)點(diǎn)寫入數(shù)據(jù)
  57. ** 輸入?yún)?shù):   鏈表頭指針,目標(biāo)結(jié)點(diǎn),要寫入的數(shù)據(jù)緩存區(qū)
  58. ** 輸出參數(shù):   無
  59. ** 返回值:     無
  60. ***************************************************************************/
  61. void WriteTargetNodeData(SingleList pHead,int TargetNode,DataBuf *writebuf)
  62. {
  63.     unsigned int i;
  64.     SingleList  pos = NULL;
  65.     pos = pHead;
  66.     for(i=0;i<=TargetNode;i++)
  67.         {
  68.            pos = pos->next;
  69.         }
  70.         pos->Byte8 = writebuf->Byte8;
  71.     pos->Byte16 = writebuf->Byte16;
  72.     pos->Byte32 = writebuf->Byte32;
  73. }

  74. /*************************************************************
  75. ** 名稱:      ReadTargetNodeData
  76. ** 描述:       讀指定節(jié)點(diǎn)的數(shù)據(jù)到緩沖區(qū)
  77. ** 輸入?yún)?shù):   單項(xiàng)鏈表頭指針,目標(biāo)節(jié)點(diǎn)的號數(shù)
  78. ** 輸出參數(shù):   無
  79. ** 返回值:     無
  80. **************************************************************/
  81. void ReadTargetNodeData(SingleList pHead,int TargetNode,DataBuf *readbuf)
  82. {
  83.    unsigned int i;
  84.    SingleList pos = NULL;
  85.    pos = pHead;      //頭節(jié)點(diǎn)賦值給
  86.    for(i=0;i<=TargetNode;i++)
  87.    {
  88.       pos = pos->next;   
  89.    }
  90.    readbuf->Byte8 = pos->Byte8;       //讀出來鏈表中的數(shù)據(jù)值
  91.    readbuf->Byte16 = pos->Byte16;
  92.    readbuf->Byte32 = pos->Byte32;
  93. }
  94. /************************************
  95. ** 名稱:       SingleListFree
  96. ** 描述:       釋放鏈表占用的空間
  97. ** 輸入?yún)?shù):   pHead: 鏈表頭指針
  98. ** 輸出參數(shù):   無
  99. ** 返回值:     無
  100. *************************************/
  101. void SingleListFree (SingleList pHead)
  102. {
  103.         SingleList p = pHead;    //得到鏈表表頭指針
  104.         while(p)
  105.         {
  106.            pHead = pHead->next;  //節(jié)點(diǎn)順序移動
  107.            free(p);              //釋放指到的對應(yīng)節(jié)點(diǎn)的內(nèi)存
  108.            p = pHead;            //傳遞給下一個節(jié)點(diǎn)
  109.         }
  110. }
  111. //先往鏈表中插入數(shù)字
  112. void main()
  113. {
  114.         unsigned int i;
  115.     SingleList  pos = NULL;  //定義鏈表節(jié)點(diǎn)
  116.         SingleList pHead;        //定義鏈表表頭節(jié)點(diǎn)
  117.         
  118.         pHead = SingleListNodeCreate ();   //創(chuàng)建鏈表表頭并且返回節(jié)點(diǎn)指針
  119.         pos = pHead;    //頭節(jié)點(diǎn)賦值給節(jié)點(diǎn)
  120.         for(i=0;i<100;i++)
  121.         {
  122.            pos = SingleListInsert (pos,i,i*100,i*1000);         //給對應(yīng)鏈表節(jié)點(diǎn)中插入數(shù)據(jù)
  123.         }
  124.         pos= pHead;             //再次回到鏈表頭節(jié)點(diǎn)
  125.         pos = pos->next;
  126.         while(pos)
  127.         {
  128.             printf("%d %d %d\n",pos->Byte8,pos->Byte16,pos->Byte32);      //循環(huán)打印鏈表節(jié)點(diǎn)中的數(shù)據(jù)        
  129.                 pos = pos->next;     //節(jié)點(diǎn)順序移動
  130.         }
  131.     printf("Output end..........................................\n");
  132.         ReadTargetNodeData(pHead,66,&readbuf);   //讀出目標(biāo)節(jié)點(diǎn)的數(shù)據(jù)
  133.     printf("%d %d %d\n",readbuf.Byte8,readbuf.Byte16,readbuf.Byte32);  //打印出來
  134.         readbuf.Byte8=123;  //重新給緩沖區(qū)賦值
  135.         readbuf.Byte16=234;
  136.         readbuf.Byte32=456;
  137.     WriteTargetNodeData(pHead,6,&readbuf);    //寫入目標(biāo)節(jié)點(diǎn)數(shù)據(jù)
  138.     ReadTargetNodeData(pHead,6,&readbuf);     //讀出來目標(biāo)節(jié)點(diǎn)的數(shù)據(jù)
  139.     printf("%d %d %d\n",readbuf.Byte8,readbuf.Byte16,readbuf.Byte32);
  140.     SingleListFree (pHead);   //釋放節(jié)點(diǎn)占用的內(nèi)存
  141.         while(1)
  142.         {;}
  143. }

復(fù)制代碼


全部代碼下載:
單向鏈表應(yīng)用_已在VC6.0上通過.rar (189.55 KB, 下載次數(shù): 11)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表