c链表使用

LIST_H


typedef struct item_t{
	unsigned short sn;	
	char command;
	unsigned short len;
	unsigned char data[234];
}item;

typedef struct node *link_ble; //定义节点指针
typedef struct node //节点定义
{
	item* data; //数据域
	link_ble next; //链域
}NODE;

生成新空链表L

link_ble make_head(link_ble l)
{
//	static const char *TAG = "LIST";
	l = (link_ble)malloc(sizeof(NODE));
//	printf("NODE=%d",sizeof(NODE));
	if (l==NULL)
	{
		 LOGW(TAG,"no memory ________MAKEHEAD\n");   
	}
	{
		/* code */
	}
	l->next = NULL;
	return l;
}

判断链表是否为空

int is_empty(link_ble l)
{
	return l->next == NULL;
}

在链表的尾部添加

void add_tail(link_ble p, item* data)
{
	if (!p)
		return;
	while (p->next != NULL)
		p = p->next;
	link_ble temp = (link_ble)malloc(sizeof(NODE));
//	printf("NODE2=%d",sizeof(NODE));
	temp->data = data;
	temp->next = p->next;
	p->next = temp;
}

打印整个链表

void print_link(link p)
{
	while (p->next != NULL)
	{
		p = p->next;
		printf("%d ", p->data);
	}
	printf("\n");
}

查询内容序号为sn为data的链表的位置

link_ble search(link_ble l, unsigned short sn)
{
	while (l != NULL)
	{
		if (l->data->sn == sn)
			break;
		l = l->next;
	}
	if (l == NULL)
	{
		 printf("not found sn=%d\n",sn);
		return NULL;
	}
	else
	{
		//printf("found sn=%d\n", l->data->sn);
		return l;
	}
}

插入

void insert(link pos, item data, item value)
{
	if (!pos)
	{
		printf("当前链表为空\n");
		return;
	}
	while (pos != NULL)
	{
		if (pos->data == data)
		{
			link temp = (link)malloc(sizeof(NODE));
			temp->data = value;
			temp->next = pos->next;
			pos->next = temp;
			break;
		}
		pos = pos->next;
	}
	if (pos == NULL)
	{
		printf("当前链表中没有找到数值为%d的数据块!\n", data);
		printf("插入失败!\n");
	}
	else
	{
		printf("插入成功!\n");
	}

}

修改

void modify(link l, item data, item value)
{
	if (!l)
	{
		printf("当前链表为空\n");
		return;
	}
	while (l != NULL)
	{
		if (l->data == data)
		{
			l->data = value;
			break;
		}
		l = l->next;
	}
	if (l == NULL)
	{
		printf("当前链表中没有找到数值为%d的数据块!\n", data);
		printf("更新失败!\n");
	}
	else
	{
		printf("更新成功!\n");
	}

}

删除

void delete(link l, item data)
{
	link tmp;
	item d_data;
	if (!l)
	{
		printf("当前链表为空\n");
		return;
	}
	while (l != NULL)
	{
		if (l->next != NULL && l->next->data == data)
		{
			tmp = l->next;
			l->next = tmp->next;
			d_data = tmp->data;
			free(tmp);
			break;
		}
		l = l->next;
	}
	if (l == NULL)
	{
		printf("当前链表中没有找到数值为%d的数据块!\n", data);
		printf("更新失败!\n");
	}
	else
	{
		printf("删除数据项%d成功!\n", d_data);
	}

}

摧毁整个链表

link_ble destory(link_ble l)
{
	link_ble tmp;
	while (l->next != NULL)
	{
		tmp = l->next;
		l->next = tmp->next;

		free(tmp->data);
		free(tmp);
	}
	return l;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值