目录
列表和列表项的初始化
List_t Testlist;定义一个列表
ListItem_t ListItem1;//定义三个列表项
ListItem_t ListItem2;
ListItem_t ListItem3;
//初始化
vListInitialise(&Testlist);
vListInitialiseItem(&ListItem1);
vListInitialiseItem(&ListItem2);
vListInitialiseItem(&ListItem3);
// 赋值
ListItem1.xItemValue = 40;
ListItem2.xItemValue = 60;
ListItem3.xItemValue = 50;
1 列表没有添加列表项的情况
1 打印 他的头指针地址 &Testlist
2 打印 头指针的下一个元素 因为是 XXXX=0xfffff 所以不用取地址
(Testlist.pxIndex )直接访问他的变量就行了
3 因为没有列表项 end 只能自己指向自己 &(Testlist.xListEnd)
1 2 3 前面 多加 int 防止变成 其他类型的数据
我么实验要的是16进制的地址 所以要整形数据。
打印结果
列表与列表项并没关联
pxIndex的值 和listEnd 的值是相等的
因为根据图可知 没有列表项 listEND只能自己指自己。
2 列表添加列表项1 的情况
相当于 链表只有一个元素 形成环形的话 就很好判断 不管怎么 头指针的下一个永远是它 它的下一个就是listEND
3 添加列表项 2
1 链表是环形的 想象一下环形结构
2 红色为第一次的(去的时候)因为是第一次参数
3 蓝色为第二次的 (回来的时候)因为是第二个参数
4 引出一个总结 去的时候是第一个 回来的时候是最后一个 因为 Pxnet的第一次是指向 40 pxPrevious第一次指向的是 60
只要保证 黄色框的对了 然后在和下面三组作对比
之前的第一个 到了第二次肯定在最 后面
然后下面的 pxNext的下一个 肯定是列表二 (因为列表项1 在黄色框的时候就是第一个 )所以中间就是listEND的地址了
4 添加列表项 3
先看红色 对着 代码的printf 一一个看 先打印 Pxnext 对着串口打印的两幅图
就能得出结果
还是一个理论 去的时候 是第一个 回来的时候就是最后一个。
删除列表项2
插入列表项 2
相当于 第一次 指向 list1 下一个就是 lsit2 lsit3就是最后一个
到了第二次 list1 就是第一个 索引改为1了,所以2会插到1后面 1可以是头也可以是尾
Testlist.pxIndex=Testlist.pxIndex->pxNext; //改变索引
vListInsertEnd(&Testlist,&ListItem2);//初始化