'; InitializeCriticalSection(&a"og:type" content="webpage">'; InitializeCriticalSection(&a" /> '; InitializeCriticalSection(&a"> C语言线程安全型双向链表的实现_CMS教程_内存溢出

阅读 57

C语言线程安全型双向链表的实现,第1张

俺给你的那个程序本来就能用啊,只是临界区忘记初始化了哈。

把初始化函数改一下即可。

NodeList(){

mHead=NULL;

mName[0]='\0';

InitializeCriticalSection(&g_cs);

}假设现在有个酱紫的链表

1 --> 2 --> 3

链表逆置之后变成:

1 <-- 2 <-- 3注意,下面的内容中 next表示结构体中下一个节点地址

哈~

下面是步骤:

1、保存上一节点的地址LAST(一开始的时候因为没有上一节点,所以L = NULL)

2、保存当前节点的地址NOW(一开始的时候是1的地址)

3、保存下一节点的地址NEXT(一开始的时候是1的下一节点的地址,即2的地址)

4、NEXT = NOW->next(保存下一节点的地址到NEXT)

5、NOW->next = LAST(断开 1 --> 2 的箭头,此时变成 1 2 --> 3)

6、LAST = NOW (把当前节点地址保存到LAST)

7、NOW = NEXT (移动到下一个节点)

8、NEXT = NOW->next(记录下一个节点的地址到NEXT)

9、NOW->next = LAST(断开 2 --> 3 的箭头,并建立 2 --> 1,因为LAST存的是1的地址)

10、LAST = NOW(把当前节点地址保存到LAST)

11、NOW = NEXT(移动到下一节点)

12、NEXT = NOW->next(记录下一个节点的地址到NEXT)

13、NOW->next = LAST(建立 3 --> 2,因为LAST存的是2的地址)

14、LAST = NOW(把当前节点地址保存到LAST)

发现没有,步骤其实是重复的!

重复的步骤就可以建立循环来解决咯~

那循环条件是什么呢?

想一下什么时候循环:当前节点滞后还有节点的时候就循环

所以循环条件就是当前节点的next指针不为NULL,不为NULL的时候,就表示后面还有节点!

以上是单链表的逆置~建议在步骤部分画个图,把每一步的NEXT、NOW、LAST的值都写一下。

回答完毕~~

唔转换成双向链表不会?

其实差不多,也是记录NOW、NEXT、LAST三个值

双向链表与单向链表的区别就只是多了一个指向前一个节点的指针(假设是last)。

在遍历整个链表的时候只要 NOW->last = LAST 加一句这个就好了

node xNode = new node;

xNode->value = x;

xNode->next = a->next;

xNode->pre = b->pre;

a->next = xNode;

b->pre = xNode;

个人理解应该是1,000,000,000,000。每三个零一个逗号。 构建一个双向链表,每个链表的节点表示一个3位整数。 从输入的字符或字符串生成链表时,可以先把1作为头节点加入,然后把000加入到下一节点,依次类推。 两个输入的长整数分别用2个链表来表示。 加法运算时,从尾部节点开始运算,两个链表的同一个位置上两个3位整数相加,如果需要进位就带入下一节点。输出可以新生成链表,输出再从头部输出,每三位一个逗号。

以上就是关于C语言线程安全型双向链表的实现全部的内容,包括:C语言线程安全型双向链表的实现、把一个单链表改成双链表程序应该怎么改、在双向链表中的值为a,b的两个结点之间插入值为x的节点,怎么写程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:

内存溢出

原文地址:

http://outofmemory.cn/zz/9854793.html
双向
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
泸县五中 泸县五中 一级用户组
什么代码可以在微信上玩小程序
上一篇
2023-05-02
PKPM打开时出现请插入加密锁的,明明插着,重装PKPM和驱动都不行,重装系统之后能行吗
2023-05-02

发表评论
请登录后评论... 登录
提交

    评论列表(0条)
保存
{label} {label}