首页 > 其他分享 >数据结构之链表

数据结构之链表

时间:2024-08-28 12:24:59浏览次数:14  
标签:node head struct next 链表 数据结构 节点

C++中常见的数据结构-CSDN博客

目录

一、链表的定义

二、链表的创建

三、链表的遍历

四、链表的插入

五、链表的删除

六、总结

 

链表是计算机科学中常见的一种数据结构,c/c++语言中也有着丰富的链表操作函数库。本文将从链表的定义、创建、遍历、插入、删除等多个方面进行详细讲解,带你从入门到精通。

一、链表的定义

链表是一种动态数据结构,由节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表分为单向链表、双向链表和循环链表等多种类型。使用链表可以灵活地插入、删除元素,不需要预先分配固定大小的内存空间。

二、链表的创建

在c/c++中,可以使用结构体来定义一个节点,并用指针来表示节点之间的关系,从而实现链表。下面是一个单向链表的创建示例代码:

#include <stdio.h>
#include <stdlib.h>
struct node
 {
    int data;           //数据域
    struct node *next;//指针域
};
int main()
{
    struct node *head,*p,*q;
    int n,i;
    printf("请输入节点个数n:");
    scanf("%d",&n);
    head = NULL;
    for (i=1; i <=n;i++)
    {
        p =(struct node *)malloc(sizeof(struct node));
        if (p== NULL)
        {
            printf("内存分配失败!");
            exit(1);
        }
        printf("请输入第%d个节点的值:",i);
        scanf("%d",&p->data);
        p->next = NULL;
        if (head == NULL)
        {
            head =p;
        }
        else 
        {
            q->next =p;
        }
        q =p;
   }
    printf("链表各节点的值为:");
    p = head;
    while (p!= NULL)
    {
        printf("%d",p->data);
        p =p->next;
    }
    return 0;
}
三、链表的遍历

链表遍历是指按照一定的顺序依次访问链表中的每一个节点。下面是一个单向链表的遍历示例代码:

cstruct node *p;
p = head;
while (p!= NULL)
{
    //访问节点p
    p =p->next;
}
四、链表的插入

链表插入是指在链表中任意位置插入一个新节点。下面是一个单向链表的插入示例代码:

void insert(struct node *head, int i, int x)
{
    struct node *p,*q,*new_node;
    new_node =(struct node *)malloc(sizeof(struct node));
    if (new_node == NULL)
    {
        printf("内存分配失败!");
        exit(1);
    }
    new_node->data =x;
    p = head;
    for (int j =1; j <=i;j++)
    {
        q =p;
        p =p->next;
    }
    new_node->next =p;
    q->next = new_node;
}
五、链表的删除

链表删除是指在链表中删除一个节点。下面是一个单向链表的删除示例代码:

void delete(struct node *head, int i)
{
    struct node *p,*q;
    p = head;
    for (int j =1; j <=i;j++)
    {
        q =p;
        p =p->next;
    }
    q->next =p->next;
    free(p);
}
六、总结

本文从链表的定义、创建、遍历、插入、删除等多个方面进行了详细讲解,希望能够帮助大家更好地理解和掌握c/c++语言中的链表操作。在实际应用中,需要根据具体情况选择合适的链表类型和操作方式,才能发挥链表的优势。

标签:node,head,struct,next,链表,数据结构,节点
From: https://blog.csdn.net/WSH2012ffff/article/details/141601368

相关文章

  • 给自己复盘的随想录笔记-链表练习题(在整理ing)
    删除链表的倒数第N个节点双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。思路是这样的,但要注意一些细节。分为如下几步:推荐大家使用虚拟头结点,这样方便处理删除实际头结点的逻辑,定......
  • 数据结构学习第一周
    本文需要掌握的知识1.认识数据结构2.了解数据结构(逻辑结构)的分类3.内存储器模型以及分配方式(物理结构)4.认识Node类5.简单了解泛型1.数据结构(D-S/DataStructure)1.1简介1.1.1数据分为原子数据和复合数据1.1.2结构分为逻辑结构和物理结构数据结构是由数据和数据......
  • 【数据结构】【模板】李超线段树
    李超线段树定义可以看看洛谷的模板题目:作用优化动态规划,如果可以将一个动态规划的转移式子转化为\(y=kx+b\)的形式,那么我们可以边转移边将\(y=kx+b\)这条线段放入李超线段树,然后在下次转移时,直接调用下次计算出来的\(x\)位置上的最大值或最小值。(结合题目理解......
  • 考研系列-408真题数据结构篇(10-17)
    写在前面此文章是本人在备考过程中408真题数据结构部分(2010年-2017年)的易错题及相应的知识点整理,后期复习也尝尝用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~#2010年1.散列表处理冲突的方法......
  • 【数据结构】关于二叉搜索树,你知道如何实现增删模拟吗???(超详解)
    前言:......
  • 数据结构链表(C语言版)
    链表定义链表是一种常见的基础数据结构,它由一系列节点(Node)组成,每个节点包含数据域和指向列表中下一个节点的指针(在双向链表中还会有指向前一个节点的指针)。链表的一个优点是它允许有效地在序列中插入和删除元素。节点(Node)一个节点通常包含两个部分:数据域(DataField):存储实......
  • 力扣刷题---链表专题(超详细解析!!!)
    文章目录题目203.移除链表元素876.链表的中间结点024.反转链表21.合并两个有序链表面试题02.04分割链表面试题02.02.返回倒数第K个节点023.相交链表题目203.移除链表元素题目链接这个题目有两种方法,第一种是创建新的链表,然后将原链表遍历一遍,跳过所有值为val的......
  • 数据结构:顺序表
    目录结构体顺序表存储数据类型结构体 顺序表结构体函数 初始化顺序表判断顺序表是否存满判断顺序表是否为空顺序表插入新元素在指定位置插入新元素遍历顺序表所有元素,对每个元素完成指定操作   (指定操作1) 打印所有元素    (指定操作2)更新指定元素......
  • 234. 回文链表
    回文链表传送锚点:234.回文链表-力扣(LeetCode)给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。示例1:输入:head=[1,2,2,1]输出:true示例2:输入:head=[1,2]输出:false提示:链表中节点数目在范围[1,105]内0<=......
  • Java数据结构栏目总结
     目录数组与稀疏数组队列:自己用数组模拟Queue环形队列,取模【取余】实现.单链表(LinkList)双向链表(Next、Pre)单向环形链表线性结构数组与稀疏数组稀疏数组,很多0值,可用于压缩特点:共n+1行3列,n为不同值的个数(0除外)第一行:数组的行数、列数、不同值的个数第二行:行......