实现了单向链表的创建,节点插入,增加,数据填充等
源程序:
- //单向链表基本操作,包括创建,整体赋值,整体读取,单个赋值,单个读取等
- //已经在VC6.0上运行通过
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct DataBuf
- {
- char Byte8;
- int Byte16;
- long Byte32;
- }DataBuf;
- DataBuf readbuf;
- //链表节点和要存储的数据申明,要插入的数据都在这里添加即可
- typedef struct SingleListNode
- {
- //要插入的链表数据值
- char Byte8; //要插入数据(1byte)
- int Byte16; //要插入数据(2byte)
- long Byte32; //要插入数据(4byte)
- struct SingleListNode *next; //每个链表的节点
- }SingleListNode;
- typedef SingleListNode *SingleList; //链表指针类型定义
- /***********************************
- ** 名称: SingleListNodeCreate
- ** 描述: 创建单向链表表头节点
- ** 输入参数: 无
- ** 输出参数: 无
- ** 返回值: 链表头指针
- *************************************/
- SingleList SingleListNodeCreate (void)
- {
- SingleList pHead = (SingleList)malloc(sizeof(SingleListNode)); //为链表表头分配内存空间,创建后次链表表头将永远不会消失,地址赋给表头指针
- pHead->next=NULL; //指针头赋值为空
- return pHead; //返回链表表头
- }
- /**************************************************************************
- ** 名称: SingleListInsert
- ** 描述: 单向链表插入数据运算
- ** 输入参数: SingleList pos: 要插入的链表表头节点
- byte : 要插入的数据
-
- ** 输出参数: 无
- ** 返回值: 插入节点的指针
- ****************************************************************************/
- SingleList SingleListInsert(SingleList pos, char byte8,int byte16,int byte32)
- {
- SingleList ptr = (SingleList)malloc(sizeof(SingleListNode)); //为新创建的链表节点分配内存
- ptr-> Byte8 = byte8; //插入数据
- ptr-> Byte16 = byte16;
- ptr-> Byte32 = byte32;
- ptr->next = pos->next; //指向下一个节点的
- pos->next = ptr; //把创建的节点指针传给下一个节点。用于移动节点
- return ptr; //返回创建的链表节点的指针
- }
- /**************************************************************************
- ** 名称: TargetNodeWriteData
- ** 描述: 向目标节点写入数据
- ** 输入参数: 链表头指针,目标结点,要写入的数据缓存区
- ** 输出参数: 无
- ** 返回值: 无
- ***************************************************************************/
- void WriteTargetNodeData(SingleList pHead,int TargetNode,DataBuf *writebuf)
- {
- unsigned int i;
- SingleList pos = NULL;
- pos = pHead;
- for(i=0;i<=TargetNode;i++)
- {
- pos = pos->next;
- }
- pos->Byte8 = writebuf->Byte8;
- pos->Byte16 = writebuf->Byte16;
- pos->Byte32 = writebuf->Byte32;
- }
- /*************************************************************
- ** 名称: ReadTargetNodeData
- ** 描述: 读指定节点的数据到缓冲区
- ** 输入参数: 单项链表头指针,目标节点的号数
- ** 输出参数: 无
- ** 返回值: 无
- **************************************************************/
- void ReadTargetNodeData(SingleList pHead,int TargetNode,DataBuf *readbuf)
- {
- unsigned int i;
- SingleList pos = NULL;
- pos = pHead; //头节点赋值给
- for(i=0;i<=TargetNode;i++)
- {
- pos = pos->next;
- }
- readbuf->Byte8 = pos->Byte8; //读出来链表中的数据值
- readbuf->Byte16 = pos->Byte16;
- readbuf->Byte32 = pos->Byte32;
- }
- /************************************
- ** 名称: SingleListFree
- ** 描述: 释放链表占用的空间
- ** 输入参数: pHead: 链表头指针
- ** 输出参数: 无
- ** 返回值: 无
- *************************************/
- void SingleListFree (SingleList pHead)
- {
- SingleList p = pHead; //得到链表表头指针
- while(p)
- {
- pHead = pHead->next; //节点顺序移动
- free(p); //释放指到的对应节点的内存
- p = pHead; //传递给下一个节点
- }
- }
- //先往链表中插入数字
- void main()
- {
- unsigned int i;
- SingleList pos = NULL; //定义链表节点
- SingleList pHead; //定义链表表头节点
-
- pHead = SingleListNodeCreate (); //创建链表表头并且返回节点指针
- pos = pHead; //头节点赋值给节点
- for(i=0;i<100;i++)
- {
- pos = SingleListInsert (pos,i,i*100,i*1000); //给对应链表节点中插入数据
- }
- pos= pHead; //再次回到链表头节点
- pos = pos->next;
- while(pos)
- {
- printf("%d %d %d\n",pos->Byte8,pos->Byte16,pos->Byte32); //循环打印链表节点中的数据
- pos = pos->next; //节点顺序移动
- }
- printf("Output end..........................................\n");
- ReadTargetNodeData(pHead,66,&readbuf); //读出目标节点的数据
- printf("%d %d %d\n",readbuf.Byte8,readbuf.Byte16,readbuf.Byte32); //打印出来
- readbuf.Byte8=123; //重新给缓冲区赋值
- readbuf.Byte16=234;
- readbuf.Byte32=456;
- WriteTargetNodeData(pHead,6,&readbuf); //写入目标节点数据
- ReadTargetNodeData(pHead,6,&readbuf); //读出来目标节点的数据
- printf("%d %d %d\n",readbuf.Byte8,readbuf.Byte16,readbuf.Byte32);
- SingleListFree (pHead); //释放节点占用的内存
- while(1)
- {;}
- }
复制代码
全部代码下载:
单向链表应用_已在VC6.0上通过.rar
(189.55 KB, 下载次数: 11)
|