单链表的增删改查

目录

  • 单链表的增删改查
    • 链表的创建和输出(有头结点)
    • 链表的查找
    • 链表的删除
    • 链表的修改

链表是一种最常见地采用动态存储分配方式的数据结构,相较于数组而言它更加灵活。

  • 单链表的特点
  1. 有一个head指针变量,他存放第一个结点的地址,称之为“头指针”。
  2. 每个结点都包含一个数据域和一个指针域,数据域存放用户需要的实际数据,指针域存放下一个结点的地址。从头结点开始,每一个结点的指针域都指向下一个结点,所有结点都是单线联系。
  3. 最后一个节点不再指向其他节点,成为“表尾”结点,它的指针域为空指针“NULL”,表示链表到此结束。
  4. 链表个节点之间的顺序关系由指针域来确定,并不要求逻辑上相邻结点物理位置也相邻,即链表依靠指针相连,并不需要占用一片连续的空间。

链表的创建和输出(有头结点)

由于链表的每个结点都包括指针域和数据域,即每个结点都要包含不同类型的数据,所以结点的数据类型必须选用结构体类型,其可包含多个各种类型的成员,其中有一个类型必须为指向本结构体类型的指针类型。
下面只写了一个为int类型的数据:

struct node{int val;//数据域struct node *next; //next的类型是指向本结构体类型的指针类型
};
  • 头插法
struct node *creat_head(){struct node *head, *p, *t = NULL;int i;head = (struct node *)malloc(sizeof(struct node));head->next = NULL; for(i = 0; i < 8; i++){p = (struct node *)malloc(sizeof(struct node));scanf("%d", &p->val);p->next = head->next;head->next = p;}print(head);return head;
}
  • 尾插法
struct node *creat_end(){struct node *head, *p, *end, *pre;int i;head = (struct node *)malloc(sizeof(struct node));end = NULL;head->next = end;pre = head;p = head;for(i = 0; i < 8; i++){p = (struct node *)malloc(sizeof(struct node));scanf("%d", &p->val);p->next = end;pre->next = p;pre = pre->next; }print(head);return head;
}
  • 链表输出
void print(struct node *head){struct node *p;p = head->next;while(p){printf("%d ", p->val);p = p->next; }printf("\n");return ;
}

链表的查找

链表的查找操作是在链表中查找某成员值为给定值的结点。若定义查找函数,其返回值为指针类型,返回指向查找到的结点的指针。

struct node *search(struct node *head){int n;struct node *p = head;printf("输入要查找的数:");scanf("%d", &n);while(p->next){p = p->next;if(p->val == n){return p;//找到返回指针p}}return NULL;//未找到返回NULL
}

链表的删除

与查找不太相同,在删除操作中需要用到两个指针,一个始终指向前驱结点,一个指向当前结点。

struct node *delete_(struct node *head){struct node *p, *q;int n;q = head->next;//指向前驱结点p = q->next;//指向当前结点printf("输入要删除的值:");scanf("%d", &n);while(p){if(p->val == n){q->next = p->next;free(p);//释放空间return head;} q = p;p = p->next;}return head;
}

链表的修改

struct node *change(struct node *head){struct node *p;int n, m;p = head->next;printf("输入要修改的值:");scanf("%d", &n);printf("修改后的值为:");scanf("%d", &m); while(p){if(p->val == n){p->val = m;return head;}p = p->next;}return head;
}

C语言 单链表的增删改查相关推荐

  1. C语言单链表实现增删改查

    1.概述 单链表使是一种链式存储结构,链表中的数据以结点的方式表示.每个结点由数据域和指针域两部分构成.数据域存储链表的数据元素,指针域存储连接相邻结点的地址. 2.单链表基本组成 typedef s ...

  2. 通用版!完整代码,单链表SingleLinkedList增删改查,反转,逆序,有效数据等Java实现

    文章目录 节点类 链表类(主要) 测试类 小结 节点类 可以根据需要,对节点属性进行修改.注意重写toString()方法,以便后续的输出操作. //节点类 class Node {public in ...

  3. 单链表实现增删改查(含头结点)

    ** 单链表实现增删改查(含头结点) ** **## 单链表** package com.Linked;public class HeadLinked {public String name;// 链 ...

  4. 带头节点单链表的增删改查

    单链表有很多结构循环单链表,有头节点的单链表,无头节点的单链表,双节点单链表,以下源码是以有一个头节点的单链表为例写的增删改查的各种功能,就是下图 然后各个注释也在函数后面写着,这玩意确实还挺难,源码 ...

  5. java单链表 提供增删改查_java实现单链表增删改查的实例代码详解

    package 数据结构算法.链表; /* *定义节点 * 链表由节点构成 */ public class node { private e e; //数据data private node next ...

  6. 单链表实现增删改查(进化版)

    主函数: 链表.cpp #include <bits/stdc++.h> #include "List.cpp" using namespace std; int ma ...

  7. Django学习笔记(10)——Book单表的增删改查页面

    一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...

  8. 极其方便的使用Mybatis单表的增删改查

    [活动]Python创意编程活动开始啦!!!      CSDN日报20170427 --<如何在没有实际项目经验的情况下找到工作>      深入浅出,带你学习 Unity 目录(?)[ ...

  9. 2020-12-13# **链表的增删改查,逆置**

    链表的增删改查,逆置,长度,排序,是否为空 1.``准备阶段## ## # include<stdio.h> # include<stdlib.h>typedef struct ...

最新文章

  1. 解决Android 7.0 App内切换语言不生效的问题
  2. 网络游戏程序中解决加载卡顿的有效方法
  3. 使用Lambda,Api Gateway和CloudFormation在AWS云上使用Java
  4. 课外阅读(通讯技术的发展史)
  5. wait() 和 waitpid()
  6. redis 用户订单缓存_Redis实战(12)-基于Key失效和定时任务实现订单支付超时自动失效...
  7. HSRP+生成树+vlan间路由!
  8. Multisim10的4013BD_5V测试电路
  9. 简单方法去除WPS广告
  10. 抱歉,我又可以了。。。
  11. jquery手写轮播图_用jquery实现图片轮播怎么写呢求指教
  12. Microsoft Word 教程:如何在 Word 中更改行距?
  13. NDS CA system和爱迪德CA系统
  14. 【干货】剖析大数据分析方法论的几种理论模型(文末有福利哦)
  15. 通过ip查看主机名和MAC地址的cmd命令
  16. 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg),方法包括求三门
  17. You Only Look One-level Feature
  18. Qt编写可视化大屏电子看板系统26-模块4模具进度
  19. 搭档之家:刘强东章泽天共同成立企业管理公司,前者持股99%
  20. 12v电源正负极区分_12V或者24V变压器输出端的电源线怎样区分正负极?

热门文章

  1. css3全屏遮罩层,css3 引导遮罩层
  2. SAR成像(零):【总结】SAR成像原理和仿真实现
  3. 高校基础数据管理系统数据库代码
  4. sensei鼠标测试软件,赛睿sensei RAW
  5. CSS3颜色(rgba,渐变)
  6. PSP豪华GPS导航配套软件全攻略
  7. 【ASS特效工具】NyuFX和Yutils(作者:Youka)
  8. MQTT 服务器(broker)
  9. 假如有三百多万存款,做什么稳健实体生意好?
  10. 神话还是谎言! 真实的GT-3是这样的!道翰天琼认知智能API接口平台为您揭秘-1。