LIST_ENTRY双向链表的练习
2017-10-21 17:44
375 查看
VOID TestFunc()
{
//链表测试
PLIST_ENTRY list = (LIST_ENTRY*)ExAllocatePool(PagedPool, sizeof(LIST_ENTRY));
InitializeListHead(list);
PLIST_ENTRY FirstList = NULL;
//将 1 ~ 10 插入链表
for (DWORD32 i = 0; i < 10; i++)
{
PMYSTRUCT p = (MYSTRUCT*)ExAllocatePool(PagedPool, sizeof(MYSTRUCT));
if (i == 0)
{//保存第一个节点的指针
FirstList = &p->mylist;
}
p->i = i + 1;
InsertTailList(list,&p->mylist);
}
//输出
LIST_ENTRY* Itemlist = list;
DWORD32 Value[10];
for (DWORD32 i = 0; i < 10; i++)
{
PMYSTRUCT p = (MYSTRUCT*)CONTAINING_RECORD(Itemlist->Flink, MYSTRUCT, mylist);
Value[i] = p->i;
Itemlist = Itemlist->Flink;
}
//删除9个节点
for (DWORD32 i = 0; i < 9; i++)
{
PLIST_ENTRY DeleteItem = RemoveTailList(list);
PMYSTRUCT p = (MYSTRUCT*)CONTAINING_RECORD(DeleteItem, MYSTRUCT, mylist);
ExFreePool(p);
}
//检查链表是否为空
BOOLEAN IsEmpty = IsListEmpty(list);
//删除最后1个节点,查看是否为空链表
IsEmpty = RemoveEntryList(FirstList);
PMYSTRUCT FirstItem = (MYSTRUCT*)CONTAINING_RECORD(FirstList, MYSTRUCT, mylist);
ExFreePool(FirstItem);
//释放资源
if (IsEmpty)
ExFreePool(list);
}这种链表我第一次接触,这是一个小实验.
LIST_ENTRY双向链表常用于WIndows驱动开发中存储信息时使用,这是WIndows内核编程中最为常见的数据结构.
{
//链表测试
PLIST_ENTRY list = (LIST_ENTRY*)ExAllocatePool(PagedPool, sizeof(LIST_ENTRY));
InitializeListHead(list);
PLIST_ENTRY FirstList = NULL;
//将 1 ~ 10 插入链表
for (DWORD32 i = 0; i < 10; i++)
{
PMYSTRUCT p = (MYSTRUCT*)ExAllocatePool(PagedPool, sizeof(MYSTRUCT));
if (i == 0)
{//保存第一个节点的指针
FirstList = &p->mylist;
}
p->i = i + 1;
InsertTailList(list,&p->mylist);
}
//输出
LIST_ENTRY* Itemlist = list;
DWORD32 Value[10];
for (DWORD32 i = 0; i < 10; i++)
{
PMYSTRUCT p = (MYSTRUCT*)CONTAINING_RECORD(Itemlist->Flink, MYSTRUCT, mylist);
Value[i] = p->i;
Itemlist = Itemlist->Flink;
}
//删除9个节点
for (DWORD32 i = 0; i < 9; i++)
{
PLIST_ENTRY DeleteItem = RemoveTailList(list);
PMYSTRUCT p = (MYSTRUCT*)CONTAINING_RECORD(DeleteItem, MYSTRUCT, mylist);
ExFreePool(p);
}
//检查链表是否为空
BOOLEAN IsEmpty = IsListEmpty(list);
//删除最后1个节点,查看是否为空链表
IsEmpty = RemoveEntryList(FirstList);
PMYSTRUCT FirstItem = (MYSTRUCT*)CONTAINING_RECORD(FirstList, MYSTRUCT, mylist);
ExFreePool(FirstItem);
//释放资源
if (IsEmpty)
ExFreePool(list);
}这种链表我第一次接触,这是一个小实验.
LIST_ENTRY双向链表常用于WIndows驱动开发中存储信息时使用,这是WIndows内核编程中最为常见的数据结构.
相关文章推荐
- Java——Math,Set,List,map相关练习
- poj_3630 Phone List(Trie树练习)
- LeetCode编程练习 - Linked List Cycle学习心得
- STL之List的一些编程练习
- 安卓小日记练习(9)序列化对象List,通过文件读取在活动间传递数据
- 集合List,SetDemo练习
- java例程练习(List常用算法)
- 练习Checkbox list
- Python 学习练习2----list
- java例程练习(List,set,map的遍历)
- 集合List的练习
- 集合框架--LinkedList集合练习堆栈和队列
- (转)Java里的list,set,map操作方法(练习)
- 算法练习——List_Throw
- java例程练习(List常用算法)
- List 练习
- Leetcode练习- Merge Two Sorted List
- 【LeetCode算法练习(C++)】Remove Nth Node From End of List
- 数据结构与算法 LeetCode编程练习--Delete Node in a Linked List
- 获取windows进程信息及CListCtrl控件(List Control)练习