_数据结构_单链表构造,增删改查

本文介绍了单链表的基本概念,包括其非物理顺序的特性及结点结构。详细讲解了单链表的初始化、头插法、查找结点、任意位置插入、删除结点以及链表反转等操作。提供了源代码链接以供参考。
摘要由CSDN通过智能技术生成

单链表是逻辑顺序结构,非物理顺序结构,是将存在不同地址的结点链接起来形成的。每个结点中的结构都相同,都是以,元素数据data和指向下一个结点*next的指针构成的
在这里插入图片描述

这里给出百度百科中的单链表逻辑结构

单链表的结构

#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
   
	int data;
	struct node* next;
}Node;

这里的data,用于存放单链表节点中的数据,next用于指向下一个结点,默认为NULL,一定是指针形式。

单链表初始化

void create(Node** head)
{
   
	*head = (Node*)malloc(sizeof(Node));
	*head = NULL;
}

初始化单链表需要先分配一个sizeof(Node)的地址空间,并将内容置为空,构造单链表的头节点

结点头插</

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是单链表增删改查的 C 语言实现: ```c #include <stdio.h> #include <stdlib.h> struct Node { int data; struct Node *next; }; // 创建单链表 struct Node* createLinkedList() { struct Node *head = (struct Node*)malloc(sizeof(struct Node)); head->next = NULL; return head; } // 插入节点 void insertNode(struct Node *head, int data, int index) { struct Node *node = (struct Node*)malloc(sizeof(struct Node)); node->data = data; node->next = NULL; struct Node *p = head; for (int i = 0; i < index && p != NULL; i++) { p = p->next; } if (p == NULL) { printf("插入位置无效\n"); return; } node->next = p->next; p->next = node; } // 删除节点 void deleteNode(struct Node *head, int index) { struct Node *p = head; for (int i = 0; i < index && p != NULL; i++) { p = p->next; } if (p == NULL || p->next == NULL) { printf("删除位置无效\n"); return; } struct Node *temp = p->next; p->next = temp->next; free(temp); } // 修改节点 void updateNode(struct Node *head, int data, int index) { struct Node *p = head->next; for (int i = 0; i < index && p != NULL; i++) { p = p->next; } if (p == NULL) { printf("修改位置无效\n"); return; } p->data = data; } // 查找节点 void findNode(struct Node *head, int data) { struct Node *p = head->next; int index = 0; while (p != NULL) { if (p->data == data) { printf("节点 %d 包含数据 %d\n", index, data); return; } p = p->next; index++; } printf("未找到数据 %d\n", data); } // 打印单链表 void printLinkedList(struct Node *head) { struct Node *p = head->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { struct Node *head = createLinkedList(); // 插入节点 insertNode(head, 1, 0); insertNode(head, 2, 1); insertNode(head, 4, 2); insertNode(head, 3, 2); // 打印单链表 printf("单链表:"); printLinkedList(head); // 删除节点 deleteNode(head, 2); // 打印单链表 printf("删除后的单链表:"); printLinkedList(head); // 修改节点 updateNode(head, 5, 2); // 打印单链表 printf("修改后的单链表:"); printLinkedList(head); // 查找节点 findNode(head, 3); findNode(head, 6); return 0; } ``` 希望这个代码能够帮助到你。如果你有任何问题或疑问,欢迎随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值