#include <stdio.h>
#include <stdlib.h>
/**
* 使用C语言实现单链表
* 基本功能:
* 1. 在链表尾部添加节点
* 2. 删除指定位置的节点(一种根据数据删除,我们根据位置删除)
* 3. 改变指定位置节点的值
* 4. 查询所有节点
*/
//1. 定义一个链表的结构体
typedef struct LinkList{
int data;//值
struct LinkList *next;// 指向下一节点
}*Link;
//2. 初始化链表并且返回
Link init(){
//开辟空间
Link link = malloc(sizeof(Link));
link->data = 0;
link->next = NULL;//这里一定要为 NULL不然后面会出错
return link;
}
//3.添加链表节点到尾部
void addNode(Link head){
// 先找到链表的尾部
while (head->next != NULL){
head = head->next;
}
// 开辟一个空间来存放新的节点
Link temp = malloc(sizeof(Link));
printf("请输入节点的值:");
int i;
scanf("%d",&i);
temp->data = i;
temp->next = NULL;
//我们将链表尾部的节点指向 temp 即可
head->next = temp;
}
//4. 为了好现实结果方便验证,我们先写出遍历链表
void show(Link head){
if (head->next == NULL){
printf("链表为空,无法遍历");
return;
}
while (head->next != NULL){
// 这里注意,我们不需要遍历出头结点的值
printf("%d -> ",head->next->data);
head = head->next;
}
}
void delete(Link list){
int index;
printf("请输入索引:");
scanf("%d",&index);
if (list == NULL){
printf("你还没有创建链表呢\n");
return;
}
if (list->next == NULL){
printf("该表为空表,请先添加数据\n");
return;
}
for (int i = 1; i < index; ++i) {
if (list->next == NULL){
printf("长度超出了链表长度\n");
return;
}
//获取到指定索引的前一个值
list = list->next;
}
//获取指定的值
Link temp = list->next;
//将指定的值后一个接到指定的前一个,就删除了
list->next = temp->next;
free(temp);
printf("删除成功\n");
}
void update(Link list){
int index;
printf("请输入索引:");
scanf("%d",&index);
if (list == NULL){
printf("你还没有创建链表呢\n");
return;
}
if (list->next == NULL){
printf("该表为空表,请先添加数据\n");
return;
}
for (int i = 0; i < index; ++i) {
if (list->next == NULL){
printf("长度超出了链表长度\n");
return;
}
//获取到指定索引的当前值
list = list->next;
}
int newDate;
printf("请输入新的值是:");
scanf("%d",&newDate);
list->data = newDate;
printf("更新成功\n");
}
void menu(){
printf("\n-------- 链表操作 --------\n");
printf("-------- 1. 添加节点 --------\n");
printf("-------- 2. 删除节点 --------\n");
printf("-------- 3. 改变节点 --------\n");
printf("-------- 4. 遍历节点 --------\n");
printf("-------- 5. 退出程序 --------\n");
}
int main() {
//我们来测试一下结果
Link link = init();
int i;
while (1){
menu();
printf("请输入你的操作:");
scanf("%d",&i);
switch (i){
case 1:
addNode(link);
break;
case 2:
delete(link);
break;
case 3:
update(link);
break;
case 4:
show(link);
break;
case 5:
exit(0);
}
}
}
C语言数据结构-1-单链表
最新推荐文章于 2024-07-23 14:40:31 发布