#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;
}
单链表的增删改查
最新推荐文章于 2024-09-10 18:20:25 发布
这篇博客介绍了C语言中链表数据结构的基本操作,包括初始化链表、头插法插入节点、打印链表、按位置删除节点以及查找指定位置的元素。通过示例代码详细展示了每个操作的实现过程,并在主函数中演示了这些操作的实际应用。
摘要由CSDN通过智能技术生成