首页 > 其他分享 >数据结构—单链表的基本操作

数据结构—单链表的基本操作

时间:2024-09-09 21:20:18浏览次数:13  
标签:结点 单链 return LNode int NULL next 基本操作 数据结构

目录

1.单链表的初始化

2.求表长操作

3.按序号查找结点

4.按值查找表结点

5.插入结点操作

6.删除结点操作

7.头插法建立单链表

8.尾插法建立单链表


1.单链表的初始化

 带头结点:

 bool InitList(LinkList &L) {               //带头结点的单链表的初始化
    L=(LNode*)malloc(sizeof(LNode));      //创建头结点,仍是指针类型,不是具体数据
    L->next=NULL;                         //头结点之后暂时还没有元素结点
    return true;                        
}

不带头节点:

 bool InitList(LinkList &L) {        //不带头结点的单链表的初始化
    L=NULL;
    return true;
}

2.求表长操作

 int Length(LinkList L) {
    int len=0;               //计数变量,初始为0
    LNode *p=L;
    while(p->next!=NULL){        
        p=p->next;
        len++;                //每访问一个结点,计数加1
    }
    return len;
}

3.按序号查找结点

 LNode  *GetElem(LinkList L,int i){
    LNode *p=L;                 //指针p指向当前扫描到的结点
    int j=0;                    //记录当前结点的位序,头结点是第0个结点
    while(p!=NULL&&j<i){        //循环找到第i个结点
        p=p->next;
        j++;
    }
    return p;                   //返回第i个结点的指针或 NULL
}

4.按值查找表结点

 LNode *LocateElem(LinkList L,ElemType e){
    LNode *p=L->next;
    while(p!=NULL&&p->data!=e)            //从第一个结点开始査找数据域为e的结点
        p=p->next;
    return p;                            //找到后返回该结点指针,否则返回 NULL
}

5.插入结点操作

bool ListInsert(LinkList &L,int i, ElemType e){
    LNode *p=L;                 //指针p指向当前扫描到的结点
    int j=0;                    //记录当前结点的位序,头结点是第0个结点
    while(p!=NULL&&j<i-1)(      //循环找到第i-1个结点
        p=p->next;
        j++;
    }
    if(p==NULL)
        return false;
    LNode *s=(LNode*)malloc(sizeof(LNode));
    s->data=e;
    s->next=p->next;
    p->next=s;
    return true;

6.删除结点操作

 bool ListDelete(LinkList &L,int i,ElemType &e){
    LNode *p=L;                    //指针p指向当前扫描到的结点
    int j=0;                       //记录当前结点的位序,头结点是第0个结点
    while(p!=NULL&&j<i-1){         //循环找到第 i-1个结点
        p=p->next;
        j++;
    }
    if(p==NULL||p->next==NULL)
        return false;
    LNode *q=p->next;            //令q指向被删除结点
    e=q->data;                   //用e返回元素的值
    p->next=q->next;            //将*q结点从链中“断开”
    free (q);                    //释放结点的存储空间
    return true;
}

7.头插法建立单链表

Linkiist List_HeadInsert(Linklist &L){          //逆向建立单链表
    LNode *s; int x;                            //设元素类型为整型
    L=(LNode*)malloc(sizeof(LNode));            //创建头结点
    L->next=NULL;
    scanf("%d",&x);                            //输入结点的值
    while(x!=9999){                            //输入9999表示结束
        s=(LNode*)malloc(sizeof(LNode));        //创建新结点
        s->data=x;
        s->next=L->next;
        L->next=s;                            //将新结点插入表中,L为头指针
        scanf("%d",&x);
    }
    return L;

8.尾插法建立单链表

LinkList List_TailInsert(LinkList &L){      //正向建立单链表
    int x;                                  //设元素类型为整型
    L=(LNode*)malloc(sizeof(LNode));        //创建头结点
    LNode *s, *r=L;                          //r为表尾指针
    scanf("%d",&x);                         //输入结点的值
    while(x!=9999){                         //输入9999表示结束
        s=(LNode*)malloc(sizeof(LNode));      
        s->data=x;
        r->next=s;
        r=s;                                //r指向新的表尾结点
        scanf("%d",&x);
    }
    r->next=NULL;                           //尾结点指针置空
    return L;
}

标签:结点,单链,return,LNode,int,NULL,next,基本操作,数据结构
From: https://blog.csdn.net/m0_74748236/article/details/142068633

相关文章

  • C ++ 从单链表到创建二叉树到二叉树的遍历(结构体)
    首先我们要了解二叉树的数据结构是什么,本质上二叉树是一个有两个节点的链表,我们先了解的单链表的相关定义单链表创建一个朴素的单链表#include<iostream>usingnamespacestd;structNode{intval;Node*next;Node(intx):val(x),next(nullptr){}......
  • 【数据结构】基础学习
    线性数据结构1.链表(LinkedList)链表是一种线性数据结构,每个节点包含数据和指向下一个节点的引用(即指针)。1.链表的基本操作(Java中的LinkedList类)LinkedList是Java标准库中的一个双向链表实现。我们将通过一些插入、删除和获取操作来演示其使用。importjava.util.L......
  • 算法与数据结构——图简介
    图图(graph)是一种非线性数据结构,由顶点(vertex)和边(edge)组成。我们可以将图G抽象地表示为一组顶点V和一组边E的集合。以下示例展示了一个包含5个顶点和7条边的图。如果将顶点看做节点,将边看做连接各个节点的引用(指针),我们就可以将图看作一种从链表拓展而来的数据结构。如下图,相较于......
  • 【数据结构】基本概念和术语
    数据(data)定义是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素(dataelement)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。数据对象(dataobject)是性质相同的数据元素的集合,是数据......
  • 数据结构与算法(三)线性表的定义与抽象数据类型
    目录一、感受线性表的存在二、线性表的定义三、考题模拟1、请问公司的组织架构是否属于线性关系?2、那么班级同学的友谊呢?3、那么班级的点名册是不是线性表?四、抽象数据类型1、数据类型的定义:2、抽象数据类型一、感受线性表的存在    从这一篇开始,我们将介......
  • 实例:使用 gdb 查看进程内存中的数据结构
    代码示例首先,创建一个简单的链表程序linked_list.c,以演示如何使用gdb查看内存中的数据结构。#include<stdio.h>#include<stdlib.h>//定义链表节点结构体typedefstructNode{intdata;structNode*next;}Node;//添加新节点到链表的尾部voidappen......
  • 数据结构-堆-详解
    数据结构-堆-详解1.性质大根堆小根堆2.实现2.1structHeap、HeapInit、HeapDestroy2.2HeapPushAdjustUp2.3HeapPopAdjustDown2.4HeapTop、HeapSize、HeapEmpty3.应用3.1堆排建堆排序3.2TopK问题1.性质堆是一种特殊的完全二叉树,其父节点总是不大于/不小于子节......
  • 算法与数据结构——堆
    堆堆(heap)是一种满足特定条件的完全二叉树,主要分为两种类型:小顶堆(minheap):任意节点的值≤其子节点的值大顶堆(maxheap):任意节点的值≥其子节点的值堆作为完全二叉树的一个特例,具有以下特性:最底层节点靠左填充,其他层的节点都被填满我们将二叉树的根节点称为“堆顶”,将......
  • 数据结构题目 第一章
    题目1、数据结构被形式的定义为(K,R),其中K是( )的有限集合,R是K上关系的有限集合。A.算法  B.数据元素 C.数据操作 D.逻辑结构2、数据元素是数据的最小单位。 ( )3、存储数据时,通常不仅需要存储各数据元素的值,而且还要存储( )。A.数据的处理方法 B.数据元素的类型......
  • PTA 6.1单链表的逆转
     这道题也是体验到了面向答案编程的过程,根据测试时系统反馈的错误点,不断更进完善,缝缝补补最后得到通过审核的代码本题要求实现一个函数,将给定的单链表逆转。正确答案:ListReverse(ListL){PtrToNodeptr=L;intlen=0;PtrToNodetemp=NULL;whil......