单链表的增删改查

这篇博客介绍了C语言中链表数据结构的基本操作,包括初始化链表、头插法插入节点、打印链表、按位置删除节点以及查找指定位置的元素。通过示例代码详细展示了每个操作的实现过程,并在主函数中演示了这些操作的实际应用。
摘要由CSDN通过智能技术生成
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct node//定义结构体
{
	int id;
	struct node*next;
}Node;
Node*init()//初始化结点
{
	Node*p = (Node*)malloc(sizeof(Node));
	p->id = 0;
	p->next = NULL;
	return p;
}
void inster(Node*head,int data)//头插法
{
	Node*p = (Node*)malloc(sizeof(Node));
	p->id = data;
	p->next = head->next;
	head->next = p;
}
void print(Node*head)//打印链表
{
	Node*p = head->next;
	while (p != NULL)
	{
		printf("%d->", p->id);
		p = p->next;
	}
	printf("NULL\n");
}
 void allclear(Node*head)销毁链表
{
	Node*p = head->next;
	while (p != NULL)
	{
		head->next = p->next;
		free(p);
		p = head->next;
	}
}
 void find(Node*head,int val)//按位置查找,按置查找if条件改动,从函数传你想找的值稍微改动即可
 {
	 Node*p=head->next;
	 int flag = 0;//标记结点位置,循环一次位置就在后移动
	 int k = 0;//用来判断找到元素没
	 while (p!=NULL)
	 {
		 flag++;
		 if (flag == val)
		 {
			 printf("元素大小:%d\t 位置是:%d\n", p->id, flag);
			 k++;
		 }
		 p = p->next;
	 }
	 if (k == 0)
	 {
		 printf("not find");
	 }
 }
 void del(Node*head, int val)//按位置删除,按值稍微改动即可
 {
	 Node*p1 = head;
	 Node*p2 = head->next;
	 int flag = 0;
	 while (p2!= NULL)
	 {
		 flag++;
		 if (flag == val)
		 {
			 p1->next = p2->next;
			 free(p2);
			 p2 = p1->next;
		 }
		 else
		 {
			 p1 = p1->next;
			 p2 = p2->next;
		 }
	 }
 }
 void change(Node*head, int val,int data)//按位置
 {
	 Node*p = head->next;
	 int flag = 0;
	 int k = 0;
	 while (p!=NULL)
	 {
		 flag++;
		 if (val == flag)
		 {
			 k = data;
			 p->id = k;
		 }
		 p = p->next;
                k++;
	 }
         if(k==0)
         {
                printf("位置出错");
            }
 }
int main()
{
	int n;
	Node*head = init();
	for (int j = 0; j < 10; j++)
		inster(head, j);
	print(head);
	/*printf("你想找的位置");
	scanf("%d", &n);
	find(head, n);
	print(head);*/
	printf("你想修改的位置");
	scanf("%d", &n);
	change(head, n,66);
	print(head);
	allclear(head);
	print(head);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

旺仔QQ糖645

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值