首页 > 其他分享 >数据结构

数据结构

时间:2023-09-19 20:45:20浏览次数:31  
标签:NULL return LNode int next DuLNode 数据结构

线性表

顺序表

链表

单链表

  1. 初始化
typedef struct LNode
{
    int data;
    struct LNode* next;
}LNode, *LinkList;

bool InitLinkList(LinkList &L) //初始化
{
    L = new LNode;
    if (L == NULL) //内存不足,分配失败
        return false;
    L->next = NULL;
    return true;
}
  1. 头插法
LinkList CreateList_Head(LinkList &L, int n) //头插法
{
    L = new LNode;
    L->next = NULL;

    for (int i = 0; i < n; i ++ )
    {
        LNode *p = new LNode;
        cin >> p->data;
        p->next = L->next;
        L->next = p;
    }

    return L;
}
  1. 尾插法
LinkList CreateList_Tail(LinkList &L, int n) //尾插法
{
    L = new LNode;
    L->next = NULL;
    LNode *tail = L;
    for (int i = 0; i < n; i ++ )
    {
        LNode *p = new LNode;
        cin >> p->data;
        tail->next = p;
        p->next = NULL;
        tail = p;
    }

    tail->next = NULL;

    return L;
}
  1. 按位查找
LNode* GetElem(LinkList L, int i) //按位查找
{
    if (i < 0)
        return NULL;
    LNode *p = L;
    int j = 0;
    while (p && j < i)
    {
        p = p->next;
        j ++ ;
    }

    return p;
}
  1. 按值查找
LNode* LocateElem(LinkList &L, int e) //按值查找
{
    LNode *p = L->next; //首元节点
    while (p && p->data != e)
    {
        p = p->next;
    }

    return p; //查找成功返回值为e的节点地址p,查找失败p为NULL
}
  1. 按位插入
bool ListInsert(LinkList L, int i, int e) //按位插入
{
    if (i < 1)
        return false;
    LNode *p;
    if (!(p = GetElem(L, i - 1)))
        return false;
    
    LNode *s = new LNode;
    s->data = e;
    
    s->next = p->next;
    p->next = s;

    return true;
}
  1. 按位删除
bool ListDelete(LinkList L, int i) //按位删除
{
    if (i < 1)
        return false;
    LNode *p;
    if (!(p = GetElem(L, i - 1)))
        return false;
    if (p -> next == NULL) //第i个节点为空
        return false;

    LNode *q = p->next;
    p->next = q->next;
    delete q;
    return true;
}
  1. 遍历
void Print(LinkList L)
{
    LNode *p = L->next;
    while (p != NULL)
    {
        if (p->next != NULL)
            cout << p->data << " ";
        else
            cout << p->data;
        p = p->next;
    }
}
  1. 判空
bool Empty(LinkList L)
{
    if (L -> next == NULL)
        return true;
    else
        return false;
}

双链表

  1. 初始化
typedef struct DuLNode
{
    int data;
    struct DuLNode *prior;
    struct DuLNode *next;
}DuLNode, *DuLinkList;

bool InitDuLinkList(DuLinkList &L) //初始化
{
    L = new DuLNode; //分配一个头节点
    if (L == NULL) //分配失败
        return false;
    L->prior = NULL; //头节点的前指针永远指向NULL
    L->next = NULL; //因为是空表,头节点之后暂时还没有节点

    return true;
}
  1. 头插法
DuLinkList CreateList_Head(DuLinkList &L, int n) //头插法
{
    L = new DuLNode;
    L->next = NULL;
    L->prior = NULL;

    for (int i = 0; i < n; i ++ )
    {
        DuLNode *p = new DuLNode;
        cin >> p->data;
        if (L->next == NULL) //插入第一个节点与插入其他节点的方法不一样
        {
            L->next = p;
            p->prior = L;
            p->next = NULL;
        }
        else
        {
            p->next = L->next;
            L->next->prior = p;
            L->next = p;
            p->prior = L;
        }
    }
    return L;
}
  1. 尾插法
DuLinkList CreateList_Tail(DuLinkList &L, int n) //尾插法
{
    L = new DuLNode;
    L->next = NULL;
    L->prior = NULL;
    DuLNode *tail = L;
    for (int i = 0; i < n; i ++ )
    {
        DuLNode *p = new DuLNode;
        cin >> p->data;
        p->prior = tail;
        tail->next = p;
        tail = p;
    }

    tail->next = NULL;

    return L;
}
  1. 按位查找
DuLNode* GetElem(DuLinkList L, int i) //按位查找
{
    if (i < 0) return NULL;
    DuLNode *p = L;
    int j = 0;
    while (p && j < i)
    {
        p = p->next;
        j ++ ;
    }

    return p;
}
  1. 按值查找
DuLNode* LocateElem(DuLinkList L, int e) //按值查找
{
    DuLNode *p = L->next;
    while (p && p->data != e)
    {
        p = p->next;
    }
    return p;
}
  1. 按位插入
bool ListInsert(DuLinkList &L, int i, int e) //按位插入
{
    if (i < 1)
        return false;
    DuLNode *p;
    if (!(p = GetElem(L, i))) //第i个元素不存在
        return false;
    DuLNode *s = new DuLNode;
    s->data = e;
    s->prior = p->prior;
    p->prior->next = s;
    s->next = p;
    p->prior = s;

    return true;
    
}
  1. 按位删除
bool ListDelete(DuLinkList &L, int i) //按位删除
{
    if (i < 1)
        return false;
    DuLNode *p;
    if (!(p = GetElem(L, i))) //第i个元素不存在
        return false;

    p->prior->next = p->next;
    if (p->next != NULL)
        p->next->prior = p->prior;
    
    delete p;

    return true;
}
  1. 遍历
void Print(DuLinkList L)
{
    DuLNode *p = L->next;
    while (p != NULL)
    {
        if (p->next != NULL)
            cout << p->data << " ";
        else
            cout << p->data;
        p = p->next;
    }
}
  1. 判空
bool Empty(DuLinkList L) //判断空表
{
    if (L->next == NULL) return true;
    else return false;
}

循环链表

标签:NULL,return,LNode,int,next,DuLNode,数据结构
From: https://www.cnblogs.com/lhycoder/p/data_structure.html

相关文章

  • case04数据结构字典
    编程提示·针对字典而言,输出字典的键运用keys函数,输出字典的值运用values函数,如需遍历字典的全部元素则可以通过items函数完成。·在字典中新增键和值,可以运用update函数;删除相应的键和值,则可以运用del命令。汇率变量日期中间价涨跌幅(%)美元兑人民币202......
  • case02数据结构之列表
    数据结构之列表:全球股票指数【任务1】在Python中使用列表数据结构并向两个列表中分别输入表1-3中的指数名称和收盘价。同时,在包含指数名称的列表中,依次访问"富时100指数""沪深300指数"这两个元素;在包含收盘价的列表中,依次找出"15437.5100""28458.4400"这两个元素的索引值。......
  • 关联式数据结构_红黑树剖析 #C++
    红黑树的性质和定义红黑树的性质红黑树是一种平衡搜索二叉树。红黑树的每个节点存储了一个标记颜色的变量(红色或黑色),通过对任意一条从根到叶子结点的路径中节点着色方式的限制,使树的最长路径不超过最短路径的两倍,因而红黑树处于一种近似平衡的状态。与AVL树相比,红黑的平衡条件更......
  • Java并发Map的面试指南:线程安全数据结构的奥秘
    简介在计算机软件开发的世界里,多线程编程是一个重要且令人兴奋的领域。然而,与其引人入胜的潜力相伴而来的是复杂性和挑战,其中之一就是处理共享数据。当多个线程同时访问和修改共享数据时,很容易出现各种问题,如竞态条件和数据不一致性。本文将探讨如何在Java中有效地应对这些挑战,介......
  • Java并发Map的面试指南:线程安全数据结构的奥秘
    简介在计算机软件开发的世界里,多线程编程是一个重要且令人兴奋的领域。然而,与其引人入胜的潜力相伴而来的是复杂性和挑战,其中之一就是处理共享数据。当多个线程同时访问和修改共享数据时,很容易出现各种问题,如竞态条件和数据不一致性。本文将探讨如何在Java中有效地应对这些挑战,......
  • 数据结构学习记录(三)
    图一、知识要点1、图的基本概念图的定义和术语图的定义图(Graph)是由两个集合构成,一个是非空但有限的顶点集合V,另一个是表述顶点之间边的集合E(可能是$\emptyset$)。图可表示为G=(V,E).每条边是一顶点对(v,w)且v,w$\in$V。通常用|V|表示顶点的数量,|E|表示边的数量。......
  • Java数据结构的学习规划
    前言最近在备考软考初级程序员(因为没有把握能够过中级所以暂时先报考初级)所以暂时停下了数据结构学习的进程。但是看到老师布置的新作业决定继续学习!!我想学习数据结构的原因,一部分是因为数据结构是程序设计的基础,学好数据结构和算法可以写出更好的算法。另外如果在以后我觉得自己......
  • 数据结构和算法的区别?——算法工程师必备基础知识
     基础部分:语言部分(Python、C++、Java)输入、输出、变量、容器等。算法和数据结构:数据结构用于存储数据,算法则是用于查找数据参考:https://www.bilibili.com/video/BV1bo4y1R7MB/......
  • 七天学会C语言-第二天(数据结构)
    1.If语句:If 语句是一种条件语句,用于根据条件的真假执行不同的代码块。它的基本形式如下:if(条件){//条件为真时执行的代码}else{//条件为假时执行的代码}写一个基础的If语句#include<stdio.h>intmain(){intx=10;if(x>5){printf("x......
  • 数据结构-Java逆天操作
    本文章会对Java线性表的相关知识进行讲解,也会以Java代码示例来进行解释对线性表的讲解分析定义线性表是一种数据结构,它是由一系列具有相同类型的元素组成的有序集合。线性表中的元素按照线性的顺序排列,每个元素只有一个前驱元素和一个后继元素,除了第一个元素没有前驱元素,最后......