C++企业链表

C++企业链表

开发工具与关键技术:C++、VisualStudio
作者:何任贤
撰写时间:2019年07月10日
	所谓的企业链表其实只是因为企业经常用到,所以叫企业链表,它相当于linux内核链表的升级版,
	那么这两种链表和传统链表有什么区别,它们和传统链表的区别就在于它们的指针域,
	也就链表节点中的next指针,至于区别在哪里呢?
	就是传统链表的指针域在linux内核链表和企业链表中是以节点形式存在的,
	至于它们是怎么以节点的形式存在,我在后面的例子会说。

现在我们来看一下linux内核链表和企业链表的区别,我们看一下下面两幅图。
在这里插入图片描述
linux内核链表
在这里插入图片描述
企业链表

在linux内核链表的示意图中我们可以看到的是图中有偏移量的字眼,而企业链表是没有的,
这就是为什么说企业链表是linux内核链表的升级版,我们在读取节点数据时,
如果使用linux内核链表则我们需要计算偏移量,企业链表则不需要,除此以外linux内核链表和企业链表一模一样。
下面是企业链表结构的定义和一些函数原型

#include
using namespace std;
typedef struct LINKNODE//链表节点中的小节点
{
LINKNODE next;
}LinkNode;
typedef struct LINKLIST//链表
{
LinkNode head;
int size;
}LinkList;
typedef struct MyDATA//节点的数据
{
LinkNode node;
char name[32];
float score;
}MyData;
LinkList * Init_LinkList();//初始化链表
void Insert_LinkList(LinkList list, LinkNode * data);//插入
void Out_LinkList(LinkList
list);//遍历输出链表
我们在定义链表结构的时候就可以看到企业链表和传统链表的区别了,在这里我定义了三个结构体,LinkNodez node就是代替传统链表中的next指针的位置,它作为一个节点的形式存在,我称它为链表节点中的小节点。下面就对上面函数原型的定义,因为对一个链表的了解,有遍历输出链表和插入节点就可以了。
LinkList * Init_LinkList()//初始化链表
{
LinkList * list = new LinkList; //创建头节点
list->head.next = NULL; //初始化头节点的next
list->size = 0; //初始化链表节点数
return list; //返回头节点
}
void Insert_LinkList(LinkList list, LinkNode * data)//插入新节点
{
LinkNode * pCurrent = &(list->head); //获取链表头节点的首地址
for (int i = 0; i < list->size; i++)//遍历寻找链表的尾节点
{
pCurrent = pCurrent->next;
}
data->next = pCurrent->next; //把新节点的next指向尾节点的next
pCurrent->next = data; //把尾节点的next指向新节点
list->size++;//链表节点数自增
}
void Out_LinkList(LinkList
list)//遍历输出链表
{
LinkNode * pCurrent = list->head.next; //获取链表头节点中的小节点
while (pCurrent != NULL) //判断小节点的next是否为空
{
MyData * p = (MyData
)pCurrent; //小节点的首地址即链表节点的首地址
cout << p->name << " " << p->score << “\n”;
pCurrent = pCurrent->next;
}
}
void main()
{
LinkList * list = Init_LinkList();
MyData p1, p2, p3;
strcpy_s(p1.name, “aaa”);
strcpy_s(p2.name, “bbb”);
strcpy_s(p3.name, “ccc”);
p1.score = 100;
p2.score = 29;
p3.score = 39;
Insert_LinkList(list, (LinkNode*)&p1);
Insert_LinkList(list, (LinkNode*)&p2);
Insert_LinkList(list, (LinkNode*)&p3);
Out_LinkList(list);
}
在这里插入图片描述
运行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值