标题:
单向链表应用 单向链表创建,节点插入,增加,数据填充等源码
[打印本页]
作者:
wodehuaban
时间:
2017-1-3 21:16
标题:
单向链表应用 单向链表创建,节点插入,增加,数据填充等源码
实现了单向链表的创建,节点插入,增加,数据填充等
图片.PNG
(14.31 KB, 下载次数: 73)
下载附件
2017-1-3 21:16 上传
源程序:
//单向链表基本操作,包括创建,整体赋值,整体读取,单个赋值,单个读取等
//已经在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)
{;}
}
复制代码
0.png
(60.17 KB, 下载次数: 69)
下载附件
2017-1-6 00:59 上传
全部代码下载:
单向链表应用_已在VC6.0上通过.rar
(189.55 KB, 下载次数: 11)
2017-1-3 21:15 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1