单链表的手动实现
来源:互联网 发布:永久域名多少钱 编辑:程序博客网 时间:2024/06/10 20:22
写程序这么多,第一次手写链表
#include "stdio.h"
#include "string.h"
#include "assert.h"
#include "stdlib.h"
#include "windows.h"
typedef struct PATCH_NODE
{
ULONG OldFuncAddr;
ULONG FakeFuncAddr;
ULONG PatchCodeLen;
PATCH_NODE* pNextNode;
} PATCH_NODE, *PPATCH_NODE;
class CSDList
{
public:
PATCH_NODE *InsertNode(PATCH_NODE *nodebefore, PATCH_NODE *node);
void DeleteNode(PATCH_NODE *node);
void DeleteList();
PATCH_NODE *SearchNode(DWORD len);
void PrintList(PATCH_NODE *node);
CSDList(){m_pNodeHead = NULL; m_pNodeLast = NULL;}
~CSDList(){}
private:
PATCH_NODE *m_pNodeHead;
PATCH_NODE *m_pNodeLast;
};
#include "StdAfx.h"
#include "SDlist.h"
PATCH_NODE *CSDList::InsertNode(PATCH_NODE *nodebefore, PATCH_NODE *node)
{
assert(node != NULL);
PATCH_NODE *newnode = NULL;
newnode = new PATCH_NODE;
memcpy(newnode, node, sizeof(PATCH_NODE));
if(nodebefore != NULL)
{
PATCH_NODE *temp = NULL;
if (nodebefore->pNextNode != NULL)
{
newnode->pNextNode = nodebefore->pNextNode;
}else{
newnode->pNextNode = NULL;
}
nodebefore->pNextNode = newnode;
}else{
if (m_pNodeHead != NULL)
{
//为首个节点时
if (m_pNodeHead->pNextNode != NULL)
{
newnode->pNextNode = m_pNodeHead;
m_pNodeHead = newnode;
}else{
newnode->pNextNode = m_pNodeHead;
m_pNodeHead = newnode;
}
}else{
m_pNodeHead = newnode;
m_pNodeHead->pNextNode = NULL;
}
}
return newnode;
}
void CSDList::DeleteNode(PATCH_NODE *node)
{
assert(node != NULL);
PATCH_NODE *nodetmp = m_pNodeHead;
while (nodetmp != NULL)
{
if (nodetmp->pNextNode->PatchCodeLen == node->PatchCodeLen)
{
nodetmp->pNextNode = node->pNextNode;
delete node;
break;
}
nodetmp = nodetmp->pNextNode;
}
}
void CSDList::DeleteList()
{
if (m_pNodeHead != NULL)
{
PATCH_NODE *node;
node = m_pNodeHead;
while(node != NULL)
{
PATCH_NODE *node_next;
node_next = node->pNextNode;
delete node;
node = node_next;
}
}
}
PATCH_NODE *CSDList::SearchNode(PATCH_NODE *target_node)
{
if (m_pNodeHead == NULL)
{
return NULL;
}
PATCH_NODE *node;
node = m_pNodeHead;
while (node != NULL)
{
if (node->PatchCodeLen == target_node->PatchCodeLen)
{
break;
}
node = node->pNextNode;
}
return node;
}
void CSDList::PrintList(PATCH_NODE *node)
{
if (node == NULL)
{
node = m_pNodeHead;
}
while (node != NULL)
{
printf("-%d-", node->PatchCodeLen);
node = node->pNextNode;
}
}
- 单链表的手动实现
- LinkedList的手动实现
- 手动实现arcgis的PrintTask
- 手动HashMap的简单实现
- 动态代理的手动实现
- 手动实现string类的方法实现
- 手动绑定下的实现事件
- 带头结点的单链表类C++手动实现
- 手动实现cookie 的python3代码
- 手动实现的客户端输入校验
- 手动实现简单的ArrayList底层
- 手动实现cocos2dx里的lua-binding
- 手动实现单链表和循环链表
- iOS_模拟KVO的底层实现、手动实现KVO
- 手动书写控件变量的添加,手动实现命令消息映射和通知消息映射
- 手动实现Vector
- 手动实现DataTable。
- 实现手动画线
- 素数--超强筛选法
- JavaScript实现删除确认框提示
- IBM的中小型企业双机容错方案 收藏
- JAVA中extends 与implements有啥区别?
- z-index在IE中的迷惑
- 单链表的手动实现
- flex 特效 很好很强大
- ASP.NET生成静态页面的方法
- extJs——grid数据展现总结(1)
- Linux signal函数解析
- log4j配置的相关例子
- iText 实现 html 转换 pdf
- 独立任务最优调度
- 心跳防护程序 收藏