链表操作类

typedef struct SocketInfo
{
	char IPAddress[20];	//IP地址
	SOCKET hSocket;		//socket句柄
	char cpName[128];	//计算机名
	char wVersion[64];	//操作系统版本
	SocketInfo * next;	//下一个节点指针
private:
	SocketInfo * head;
}SocketInfo;



class SocketData   //连接链表
{
public:
	SocketData();
	~SocketData();
	int GetSocketNum();//获取链表数量
	BOOL DeleteSocket(char * IPAddress , char * cpName);//删除指定节点
	BOOL AppendSocket(char * IPAddress , SOCKET hSocket , char * cpName , char * wVersion );//尾部添加节点
	SocketInfo * GetSocketInformation(char * IPAddress , char * cpName);//获取指定节点信息
private:
	SocketInfo * head;
};

SocketData::SocketData()
{
	head = NULL;
}

SocketData::~SocketData()
{
	SocketInfo * p = head;
	SocketInfo * p1 = head;
	if(head != NULL)
	{
		do
		{
			p1 = p;
			p = p->next;
			free(p1);
		}while(p != NULL);
		head = NULL;
	}
}

int SocketData::GetSocketNum()
{
	int num = 0;
	SocketInfo * p = head;
	if(head != NULL)
	{
		do
		{
			p = p->next;
			num++;
		}while(p != NULL);
	}
	return num;
}

BOOL SocketData::AppendSocket(char * IPAddress , SOCKET hSocket , char * cpName , char * wVersion )
{
	SocketInfo * p = head;
	if(head != NULL)		//如果是非空表
	{
		while(p->next != NULL)
		{
			p=p->next;
		}
		SocketInfo * newnode = (SocketInfo * )malloc(LEN);
		strcpy(newnode->IPAddress , IPAddress);
		newnode->hSocket = hSocket;
		strcpy(newnode->cpName , cpName);
		strcpy(newnode->wVersion , wVersion);
		newnode->next = NULL;
		p->next = newnode;
	}
	else	//如果是空表
	{
		SocketInfo * newnode = (SocketInfo * )malloc(LEN);
		strcpy(newnode->IPAddress , IPAddress);
		newnode->hSocket = hSocket;
		strcpy(newnode->cpName , cpName);
		strcpy(newnode->wVersion , wVersion);
		newnode->next = NULL;
		head = newnode;
	}
	return TRUE;
}

BOOL SocketData::DeleteSocket(char * IPAddress , char * cpName)
{
	SocketInfo * p = head;
	SocketInfo * p1 = head;
	if(head != NULL)//非空表删除节点
	{
		do
		{
			if(strcmp(p->IPAddress , IPAddress)==0 && strcmp(p->cpName , cpName)==0)
				break;
			p1 = p;
			p = p->next;
		}while(p != NULL);
		if(p == NULL)			//搜索至表尾部没有发现搜索项目
			return FALSE;
		if(p1 == head && p ==head) //首节点
		{
			if(p->next!=NULL) //不止一个节点
			{
				head = p->next;
				free(p);
			}
			else			//只有一个节点
			{
				head = NULL;
				free(p);
			}
		}
		else if (p->next == NULL)		//尾节点
		{
			p1->next = NULL;
			free(p);
		}
		else				//中间节点
		{
			p1->next = p->next;
			free(p);
		}
		return TRUE;
	}
	return FALSE; //空表不能删除节点
}

SocketInfo * SocketData::GetSocketInformation(char * IPAddress , char * cpName)
{
	SocketInfo * p = head;
	if(head != NULL)//非空表获取信息
	{
		do
		{
			if(strcmp(p->IPAddress , IPAddress)==0 && strcmp(p->cpName , cpName)==0)
				break;
			p = p->next;
		}while(p != NULL);
		if(p == NULL)			//搜索至表尾部没有发现搜索项目
			return NULL;
		return p;
	}
	return NULL; //空表不能获取信息
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值