找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3040|回复: 0
收起左侧

单向链表应用 单向链表创建,节点插入,增加,数据填充等源码

[复制链接]
ID:159275 发表于 2017-1-3 21:16 | 显示全部楼层 |阅读模式
实现了单向链表的创建,节点插入,增加,数据填充等
图片.PNG

源程序:
  1. //单向链表基本操作,包括创建,整体赋值,整体读取,单个赋值,单个读取等
  2. //已经在VC6.0上运行通过
  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. //链表节点和要存储的数据申明,要插入的数据都在这里添加即可
  13. typedef struct SingleListNode
  14. {
  15.    //要插入的链表数据值
  16.    char         Byte8;               //要插入数据(1byte)
  17.    int          Byte16;              //要插入数据(2byte)
  18.    long         Byte32;              //要插入数据(4byte)
  19.    struct SingleListNode *next;      //每个链表的节点
  20. }SingleListNode;
  21. typedef SingleListNode *SingleList;  //链表指针类型定义
  22. /***********************************
  23. ** 名称:      SingleListNodeCreate
  24. ** 描述:       创建单向链表表头节点
  25. ** 输入参数:   无
  26. ** 输出参数:   无
  27. ** 返回值:     链表头指针
  28. *************************************/
  29. SingleList SingleListNodeCreate (void)
  30. {
  31.    SingleList pHead = (SingleList)malloc(sizeof(SingleListNode));  //为链表表头分配内存空间,创建后次链表表头将永远不会消失,地址赋给表头指针
  32.    pHead->next=NULL;     //指针头赋值为空
  33.    return pHead;         //返回链表表头
  34. }
  35. /**************************************************************************
  36. ** 名称:       SingleListInsert
  37. ** 描述:       单向链表插入数据运算
  38. ** 输入参数:   SingleList pos: 要插入的链表表头节点
  39.                byte  :    要插入的数据
  40.                           
  41. ** 输出参数:   无
  42. ** 返回值:     插入节点的指针
  43. ****************************************************************************/
  44. SingleList SingleListInsert(SingleList pos, char byte8,int byte16,int byte32)
  45. {
  46.         SingleList ptr = (SingleList)malloc(sizeof(SingleListNode)); //为新创建的链表节点分配内存
  47.         ptr-> Byte8    = byte8;        //插入数据
  48.         ptr-> Byte16   = byte16;              
  49.         ptr-> Byte32   = byte32;
  50.         ptr->next      = pos->next;    //指向下一个节点的
  51.         pos->next      = ptr;          //把创建的节点指针传给下一个节点。用于移动节点
  52.         return ptr;    //返回创建的链表节点的指针
  53. }
  54. /**************************************************************************
  55. ** 名称:      TargetNodeWriteData
  56. ** 描述:       向目标节点写入数据
  57. ** 输入参数:   链表头指针,目标结点,要写入的数据缓存区
  58. ** 输出参数:   无
  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. ** 描述:       读指定节点的数据到缓冲区
  77. ** 输入参数:   单项链表头指针,目标节点的号数
  78. ** 输出参数:   无
  79. ** 返回值:     无
  80. **************************************************************/
  81. void ReadTargetNodeData(SingleList pHead,int TargetNode,DataBuf *readbuf)
  82. {
  83.    unsigned int i;
  84.    SingleList pos = NULL;
  85.    pos = pHead;      //头节点赋值给
  86.    for(i=0;i<=TargetNode;i++)
  87.    {
  88.       pos = pos->next;   
  89.    }
  90.    readbuf->Byte8 = pos->Byte8;       //读出来链表中的数据值
  91.    readbuf->Byte16 = pos->Byte16;
  92.    readbuf->Byte32 = pos->Byte32;
  93. }
  94. /************************************
  95. ** 名称:       SingleListFree
  96. ** 描述:       释放链表占用的空间
  97. ** 输入参数:   pHead: 链表头指针
  98. ** 输出参数:   无
  99. ** 返回值:     无
  100. *************************************/
  101. void SingleListFree (SingleList pHead)
  102. {
  103.         SingleList p = pHead;    //得到链表表头指针
  104.         while(p)
  105.         {
  106.            pHead = pHead->next;  //节点顺序移动
  107.            free(p);              //释放指到的对应节点的内存
  108.            p = pHead;            //传递给下一个节点
  109.         }
  110. }
  111. //先往链表中插入数字
  112. void main()
  113. {
  114.         unsigned int i;
  115.     SingleList  pos = NULL;  //定义链表节点
  116.         SingleList pHead;        //定义链表表头节点
  117.         
  118.         pHead = SingleListNodeCreate ();   //创建链表表头并且返回节点指针
  119.         pos = pHead;    //头节点赋值给节点
  120.         for(i=0;i<100;i++)
  121.         {
  122.            pos = SingleListInsert (pos,i,i*100,i*1000);         //给对应链表节点中插入数据
  123.         }
  124.         pos= pHead;             //再次回到链表头节点
  125.         pos = pos->next;
  126.         while(pos)
  127.         {
  128.             printf("%d %d %d\n",pos->Byte8,pos->Byte16,pos->Byte32);      //循环打印链表节点中的数据        
  129.                 pos = pos->next;     //节点顺序移动
  130.         }
  131.     printf("Output end..........................................\n");
  132.         ReadTargetNodeData(pHead,66,&readbuf);   //读出目标节点的数据
  133.     printf("%d %d %d\n",readbuf.Byte8,readbuf.Byte16,readbuf.Byte32);  //打印出来
  134.         readbuf.Byte8=123;  //重新给缓冲区赋值
  135.         readbuf.Byte16=234;
  136.         readbuf.Byte32=456;
  137.     WriteTargetNodeData(pHead,6,&readbuf);    //写入目标节点数据
  138.     ReadTargetNodeData(pHead,6,&readbuf);     //读出来目标节点的数据
  139.     printf("%d %d %d\n",readbuf.Byte8,readbuf.Byte16,readbuf.Byte32);
  140.     SingleListFree (pHead);   //释放节点占用的内存
  141.         while(1)
  142.         {;}
  143. }

复制代码
0.png

全部代码下载:
单向链表应用_已在VC6.0上通过.rar (189.55 KB, 下载次数: 11)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表