C语言单链表例程

****//头文件
#include “stdio.h”
#include “stdlib.h”
//创建链表,这个应该都差不多会吧!!
typedef struct List
{
int List_data;
struct List *List_Next;
}List;
//从头节点去遍历链表,遍历的每一个节点去打印出其数据域
void Display(List *List_Head)
{
int i = 1;
printf("\n");
while (List_Head->List_Next != NULL)
{
printf(“节点 %d 的数据是 %d \n”, i++, List_Head->List_data);
List_Head = List_Head->List_Next;
}
printf("\n");
}
//链表的创建,如果想链表内的数据无序的,可以加一个scanf
//取消其自动用 i 赋值
List *List_Link(List *List_Head, int List_Num)
{
List * List_traverse;
List_traverse = List_Head;
for (int i = 0; i < List_Num; i++)
{
List *List_Link;
if ((List_Link = (List *)malloc(sizeof(List))) == NULL)
{
perror(“List Link”);
return 0;
}
if (i == 0)
{
List_traverse->List_data = i + 1;
}
List_Link->List_data = i + 2;
List_Link->List_Next = NULL;
List_traverse->List_Next = List_Link;
List_traverse = List_traverse->List_Next;
}
return List_Head;
}
//可以按照位置去插入,如果上面是手动输入值得话,
//如果要根据值得大小去插入,可以自己修改。
//如果不会,可以私聊本人。
List *List_Add(List *List_Head, int location, int Add_Value)
{
List *List_traverse;
List List_Add;
if ((List_Add = (List
)malloc(sizeof(List))) == NULL)
{
perror(“List Link”);
return 0;
}
List_traverse = List_Head;
if (location == 1)
{
List_Add->List_data = Add_Value;
List_Add->List_Next = List_traverse;
return List_Add;
}
else
{
for (int i = 2; i < location; i++)
{
List_traverse = List_traverse->List_Next;
}
List_Add->List_data = Add_Value;
List_Add->List_Next = List_traverse->List_Next;
List_traverse->List_Next = List_Add;
return List_Head;
}
return (List *)1;
}
//查找,遍历链表。
int List_Lukf(List *List_Head, int Lkup_value)
{
int Location = 1;
List *List_traverse;
List_traverse = List_Head;
while (List_traverse->List_Next != NULL)
{
if (List_traverse->List_data == Lkup_value)
{
printf(" 位置是: %d !\n", Location);
}
List_traverse = List_traverse->List_Next;
Location++;
}
return Location;
}
//改变,可以按照对应的位置去查找。遍历链表。
List List_Change(List List_Head, int location, int Change_Value)
{
List * List_traverse;
List_traverse = List_Head;
for (int i = 1; i < location; i++)
{
List_traverse = List_traverse->List_Next;
}
List_traverse->List_data = Change_Value;
return List_Head;
}
//删除对应位置的链表
List List_Del(List List_Head, int location)
{
List List_traverse;
List_traverse = List_Head;
for (int i = 2; i < location; i++)
{
List_traverse = List_traverse->List_Next;
}
List Del = List_traverse->List_Next;
List_traverse->List_Next = List_traverse->List_Next->List_Next;
free(Del);
return List_Head;
}
int main()
{
List List_Head;
int List_Num;
int List_Value;
if ((List_Head = (List )malloc(sizeof(List))) == NULL)
{
perror(“List Link”);
return 0;
}
printf(“请输入要创建的链表个数:\n”);
scanf("%d", &List_Num);
List_Head = List_Link(List_Head, List_Num);
Display(List_Head);
printf(“请输入要添加节点的位置与对应节点的值!\n”);
printf(“节点位置:\n”);
scanf("%d", &List_Num);
printf(“节点对应的值:\n”);
scanf("%d", &List_Value);
List_Head = List_Add(List_Head, List_Num, List_Value);
Display(List_Head);
printf(“请输入要查找节点的值!\n”);
scanf("%d", &List_Value);
List_Value = List_Lukf(List_Head, List_Value);
//printf(“对应节点的位置为第 %d 个节点\n”, List_Value);
Display(List_Head);
printf(“请输入要修改的对应节点的位置:\n”);
scanf("%d", &List_Num);
printf(“请为第 %d 个节点赋予新值:\n”, List_Num);
scanf("%d", &List_Value);
List_Change(List_Head, List_Num, List_Value);
Display(List_Head);
printf(“请输入要删除的对应节点的位置:\n”);
scanf("%d", &List_Num);
List_Head = List_Del(List_Head, List_Num);
Display(List_Head);
system(“pause”);
return 0;
}

PS:如果有不懂得,可以私聊我哦。一起努力吧!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值