关于链表的创建 代码
2009-04-22 15:54
267 查看
struct SocketObj
{
SOCKET socket; //当前对象的socket
BOOL listening; //该套接字是否已经
SocketObj *next, //向后
*prev; //向前
};
SocketObj *g_pSocketList = NULL; //Socket连表
SocketObj *g_pSocketEnd = NULL; //连表的尾部
int g_nSocketCount = 0;
HANDLE g_hSelect;
//创建SocketObj
SocketObj* GetSocketObj(SOCKET s,BOOL listening)
{
SocketObj *newSocketObj = NULL;
newSocketObj = (SocketObj*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SocketObj));
if(newSocketObj == NULL)
{
cout<<"GetSocketObj: HeapAlloc failed: "<< GetLastError()<<endl;
ExitProcess(-1); //结束进程
}
newSocketObj->socket = s;
newSocketObj->listening = listening;
return newSocketObj;
}
//插入一个SocketObj
void InserSocketObj(SocketObj *obj)
{
obj->next = obj->prev = NULL;
if(g_pSocketList == NULL)
{
g_pSocketList = g_pSocketEnd = obj;
}
else
{
obj->prev = g_pSocketEnd;
g_pSocketEnd->next = obj;
g_pSocketEnd = obj;
}
g_nSocketCount++;
}
//删除
void RemoveSocketObj(SocketObj *obj)
{
if(obj->prev)
{
obj->prev->next = obj->next;
}
if(obj->next)
{
obj->next->prev = obj->prev;
}
if(obj == g_pSocketList)
{
g_pSocketList = obj->next;
}
if(obj == g_pSocketEnd)
{
g_pSocketEnd = obj->prev;
}
g_nSocketCount--;
HeapFree(GetProcessHeap(),0,obj);
}
{
SOCKET socket; //当前对象的socket
BOOL listening; //该套接字是否已经
SocketObj *next, //向后
*prev; //向前
};
SocketObj *g_pSocketList = NULL; //Socket连表
SocketObj *g_pSocketEnd = NULL; //连表的尾部
int g_nSocketCount = 0;
HANDLE g_hSelect;
//创建SocketObj
SocketObj* GetSocketObj(SOCKET s,BOOL listening)
{
SocketObj *newSocketObj = NULL;
newSocketObj = (SocketObj*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SocketObj));
if(newSocketObj == NULL)
{
cout<<"GetSocketObj: HeapAlloc failed: "<< GetLastError()<<endl;
ExitProcess(-1); //结束进程
}
newSocketObj->socket = s;
newSocketObj->listening = listening;
return newSocketObj;
}
//插入一个SocketObj
void InserSocketObj(SocketObj *obj)
{
obj->next = obj->prev = NULL;
if(g_pSocketList == NULL)
{
g_pSocketList = g_pSocketEnd = obj;
}
else
{
obj->prev = g_pSocketEnd;
g_pSocketEnd->next = obj;
g_pSocketEnd = obj;
}
g_nSocketCount++;
}
//删除
void RemoveSocketObj(SocketObj *obj)
{
if(obj->prev)
{
obj->prev->next = obj->next;
}
if(obj->next)
{
obj->next->prev = obj->prev;
}
if(obj == g_pSocketList)
{
g_pSocketList = obj->next;
}
if(obj == g_pSocketEnd)
{
g_pSocketEnd = obj->prev;
}
g_nSocketCount--;
HeapFree(GetProcessHeap(),0,obj);
}
相关文章推荐
- 【编程题目】求单向链表的倒数第k个节点——关于代码鲁棒性的探讨(C++实现)
- 垃圾代码评析——关于《C程序设计伴侣》9.4——链表(三)
- 树的孩子链表表示法可执行代码(创建,层次遍历)
- 关于线性表的链式存储(链表)的创建,头插法,尾插法,删除链表结点的操作
- 《Applications=Code+Markup》读书札记(2)——创建一个简单的 WPF 程序的代码结构及关于 Window 实例位置设置问题
- 【C】关于链表的创建
- 关于在c#中创建用户控件后,winform应用程序在调用中无法通过点击用户控件的子控件为其自动添加事件代码的问题
- 数据结构:链表创建、显示、求和、插入、删除等操作的代码实现
- 垃圾代码评析——关于《C程序设计伴侣》9.4——链表(三)
- 树的孩子链表表示法可执行代码(创建,层次遍历)
- 关于c语言用双重指针在无需返回的情况下于函数中创建链表的一点小小发现
- 垃圾代码评析——关于《C程序设计伴侣》9.4——链表(二)
- C 创建链表并将信息存储在二进制文件中读取的实例代码
- 关于链表的一些总结和代码,java实现
- 关于链表的代码
- 树的孩子链表表示法可执行代码(创建,层次遍历)
- 一个链表创建、反转、打印的C语言代码
- 数据结构 双向链表的创建和读取详解及实例代码
- 关于单向链表创建以及一些简单的增删查改功能
- 关于单链表的各种函数的C++源代码,创建单链表、求表长、插入、删除等等