C语言 链表

目录

创建链表节点结构体

创建节点 数据打包

连接链表

 插入连接到链表

删除节点

链表查询


创建链表节点结构体

typedef struct node
{
	//struct node * prev;//上一个节点
	int data;//数据域
	struct node* next;//下一个节点
} Node, * PNode;

这里我们建的是一个单向链表

创建头节点和尾节点

PNode header;//头节点
PNode ender;//尾节点

创建节点 数据打包

进去的是数据,出来的是节点

PNode create(int data);

PNode create(int data)//进去的是数据,出来的是节点
{
	PNode newNode = (PNode)malloc(sizeof(Node));
	newNode->data = data;
	newNode->next = NULL;
	return newNode;
}

连接链表

void add(PNode node);

void add(PNode node)
{
	if (header == NULL)//空链表
	{
		header = ender = node;
	}
	else
	{
		ender->next = node;
		ender = node;//让新的节点称为尾部节点
	}
}

 插入连接到链表

void insert_behind(int index, PNode node);

void insert_behind(int index, PNode node)
{ 
	//理想的 中间插入
	//1.找到插入点
	PNode p = header;
	for (int i = 0; i < index; i++)
	{
		p = p->next;
	}
	//2.插入连接到链表
	node->next = p->next;
	p->next = node;

}

删除节点

按下标删除节点:

void remove_index(int index);

void remove_index(int index)
{
	 //找到位置
	PNode p = header;
	PNode q = NULL;
	for (int i = 0; i < index; i++)
	{
		q = p;
		p = p->next;
	}
	if (p != NULL && q != NULL)
	{
		q->next = p->next;
		free(p);
		p = NULL;
	}

}

按数据删除节点:

先要根据数据找到下标,在根据下标删除节点

寻找某数据的下标:

int indexOf(int data);

int indexOf(int data)
{
	PNode p = header;
	for (int i = 0; p != NULL; i++)
	{
		if (p->data == data)
		{
			return i;
		}
		p = p->next;
	}
	return -1;
}

删除节点:

void remove_data(int data);

void remove_data(int data) 
{
	int i = indexOf(data);
	if (i >= 0)
	{
		remove_index(i);
	}

}

链表查询

某下标的数据节点:

PNode get(int index);

PNode get(int index)
{
	PNode p = header;
	for (int i = 0; i < index; i++)
	{
		p = p->next;
	}
	return p;
}

某下标的数据:

int get_data(int index);

int get_data(int index)
{
	PNode p = header;
	for (int i = 0; i < index; i++)
	{
		p = p->next;
	}
	return p->data;

}

链表长度:

int size();

int size()
{
	PNode p = header;
	int count = 0;
	while (p != NULL)
	{
		count++;
		p = p->next;
	}
	return count;
}

遍历链表:

	for (int i = 0, len = size(); i < len; i++)
	{
		PNode p = get(i);
		printf("%d %d\n", p->data,get_data(i));
	}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员懒羊羊

多多支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值