C语言 NOTE28

数据结构链表

在这里插入图片描述

数据存储在内存上可以不连续,可以将零散的内存联系起来,数据增删处理简单。

typedef struct DATALIST
{
	int data;
	PDataList next;
}DataList, *PDataList;

数据的插入方法:

  • 尾插法
bool trail_data_list(int num, PDataList head)
{
	//判断是否为空链表
	if(NULL == head)
	{
		printf("add data error\n");
		return false;
	}
	//找出最后一个节点
	PDataList p = head;
	while(NULL != p->next)
	{
		p = p->next;
	}
	//插入节点
	PDataList tem = calloc(1, sizeof(DataList));
	tem->data = num;
	tem->next = NULL;
	p->next = tem;
	return true;	
}
  • 头插法
bool head_data_list(int num, PDataList head)
{
	//判断头结点是否为空
	if(NULL == head)
	{
		printf("addr error\n");
		return false;
	}
	//插入节点
	PDataList p = calloc(1, sizeof(DataList));
	p->data = num;
	p->next = head->next;
	head->next = p;
	return true;
}
  • 排序插法
    在这里插入图片描述
bool sort_data_list(int num, PDataList head)
{
	//判断头结点是否为空
	if(NULL == head)
	{
		printf("addr error\n");
		return false;
	}
	

	
	//插入节点
	PDataList tem = calloc(1, sizeof(DataList));
	tem->data = num;
	//比链表中间结点小
	PDataList p = head->next;
	PDataList pos = p;
	while(p != NULL)
	{
		if(num < p->data)
		{
			tem->next= p;
			pos->next = tem;
			return true;
		}
		pos = p;
		p = p->next;
	}
	//num为最大值时:
	pos->next = tem;
	tem->next = NULL;
	
}

在这里插入图片描述

//删除节点:
bool delete_data_list(int num, PDataList head)
{
	if(NULL == head)
	{
		printf("addr error\n");
		return false;
	}
	PDataList pos = head->next;
	PDataList p = pos->next;
	while(NULL != p)
	{
		if(num == p->data)
		{
			pos->next = p->next;
			p->next = NULL;
			free(p);
			return true;
		}
		pos = p;
		p = pos->next;
	}
	printf("data not exist\n");
	return false;
}
发布了52 篇原创文章 · 获赞 2 · 访问量 1998

猜你喜欢

转载自blog.csdn.net/weixin_42191545/article/details/103951169