链表学习(链表的创建,插入,删除,查找,遍历)

简介: 链表学习(链表的创建,插入,删除,查找,遍历)

链表学习


1.链表的创建:

创建一个 头结点 并返回 空的节点


Linked* Create()
{
    Linked* head = (Linked*)malloc(sizeof(Linked));
    head -> next = NULL;
    return head;   
}


2.链表的删除:


删除标志节点后的下一个节点


void DeleteAfter(Linked* node)
{
    Linked* nextnode=node->next; 
  node -> next = nextnode -> next;
  free(nextnode);//释放删除节点的内存
}


3.查找节点


查找链表中索引为 index 的元素,注意当 index 为 0 的时候返回的是头节点的下一个节点;


Linked* GetByIndex(Linked *head,int index)
{
    head=head->next;
    if(index==0)
    {
        return head;
    }
    else
    {
        while(index--)
        {
            head=head->next;
        }
        return head;//查找索引节点
    } 
}


4.插入节点


在指定节点后面插入一个新节点,并赋值;


void InsertAfter(Linked* node,int num,float sc)
{
    Linked* newNode = (Linked*)malloc(sizeof(Linked));
    newNode->key=num;
    newNode->num=sc;
    newNode->next=node->next;
    node->next=newNode;
}


5.遍历节点


逐个遍历:


void PrintAll(Linked* head)
{
    Linked* p=head->next;
    while(p)//当 p = NULL 的时候结束 
    {
        cout << p->key<<" "<<p->num<<endl;
        p=p->next;
    }
}


主程序:

#include <iostream>
using namespace std;
struct Linked
{
    /********* Begin *********/
    //结构体的成员变量
    int  key;
    float num;
    Linked* next;
    /********* End *********/
};
Linked* Create()
{
    /********* Begin *********/
    //创建并返回一个新链表
    Linked* head = (Linked*)malloc(sizeof(Linked));
    head -> next = NULL;
    return head;
    /********* End *********/
}
void InsertAfter(Linked* node,int num,float sc)
{
    /********* Begin *********/
    //在指定节点后插入一个新节点,内容由 num,sc 参数指定
    Linked* newNode = (Linked*)malloc(sizeof(Linked));
    newNode->key=num;
    newNode->num=sc;
    newNode->next=node->next;
    node->next=newNode;
    /********* End *********/
}
void DeleteAfter(Linked* node)
{
  /********* Begin *********/
    //删除此节点之后的一个节点
    Linked* nextnode=node->next; 
  node -> next = nextnode -> next;
  free(nextnode);
  /********* End *********/
}
Linked* GetByIndex(Linked *head,int index)
{
  /********* Begin *********/
    //返回指定索引处的节点
    head=head->next;
    if(index==0)
    {
        return head;
    }
    else
    {
        while(index--)
        {
            head=head->next;
        }
        return head;
    }
  /********* End *********/ 
}
void PrintAll(Linked* head)
{
    Linked* p=head->next;
    while(p)//当 p = NULL 的时候结束 
    {
        cout << p->key<<" "<<p->num<<endl;
        p=p->next;
    }
}
int main()
{
  int num;
  float score;
  cin >> num >> score ;
    Linked* lk = Create();//创建头节点 
    InsertAfter(lk,num,score);//插入第一组数据 
  cin >> num >> score ;
    InsertAfter(GetByIndex(lk,0),num,score);//找到第一个节点,在第一个节点后插入节点 
  cin >> num >> score ;
    InsertAfter(GetByIndex(lk,1),num,score);//找到第二个节点,在第一个节点后插入节点 
    DeleteAfter(GetByIndex(lk,0));//删除第二个节点 
    PrintAll(lk);//打印 
}


结果图:


eb7afad8b45669b484a772d6ddf5bdab_7fe687a4b5224a5b83d020a6f6fab902.png



目录
相关文章
|
22天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
22天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
24 3
|
1月前
|
算法 Java
数据结构与算法学习五:双链表的增、删、改、查
双链表的增、删、改、查操作及其Java实现,并通过实例演示了双向链表的优势和应用。
17 0
数据结构与算法学习五:双链表的增、删、改、查
|
5月前
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
64 0
|
5月前
|
存储 缓存 算法
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
49 0
|
5月前
|
算法
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
48 0
|
5月前
|
算法
数据结构和算法学习记录——习题-移除链表元素
数据结构和算法学习记录——习题-移除链表元素
24 0
|
1月前
|
算法 Java
数据结构与算法学习六:单向环形链表应用实例的约瑟夫环问题
这篇文章通过单向环形链表的应用实例,详细讲解了约瑟夫环问题的解决方案,并提供了Java代码实现。
21 0
|
4月前
|
存储
链表的遍历方式
链表的遍历方式