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

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

链表学习


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



目录
相关文章
|
2月前
|
算法 Java 索引
【数据结构与算法】4、双向链表(学习 jdk 的 LinkedList 部分源码)
【数据结构与算法】4、双向链表(学习 jdk 的 LinkedList 部分源码)
34 0
|
4月前
|
算法 Python Java
Java每日一练(20230429) 二叉树后序遍历、删除无效括号、合并有序链表
Java每日一练(20230429) 二叉树后序遍历、删除无效括号、合并有序链表
29 0
Java每日一练(20230429) 二叉树后序遍历、删除无效括号、合并有序链表
|
4月前
|
算法 Java C++
Java每日一练(20230424) 二叉树中序遍历、交换链表节点、不同子序列
Java每日一练(20230424) 二叉树中序遍历、交换链表节点、不同子序列
36 0
Java每日一练(20230424) 二叉树中序遍历、交换链表节点、不同子序列
|
4月前
|
Go Java C++
Java每日一练(20230409) 多数元素、反转链表 II 、日期之间的遍历
Java每日一练(20230409) 多数元素、反转链表 II 、日期之间的遍历
29 0
Java每日一练(20230409) 多数元素、反转链表 II 、日期之间的遍历
|
5月前
|
存储
队列的学习(一)用数组和链表实现单向队列
队列的学习(一)用数组和链表实现单向队列 队列(Queue)是一种先进先出的数据结构,类似于现实生活中排队的场景。它有两个基本操作:入队(enqueue)和出队(dequeue)。在本文中,我们将介绍如何使用数组和链表来实现单向队列。
|
5月前
|
存储
链表的学习:链表的头插法和尾插法以及HashMap中链表结点的插入方式
链表的学习:链表的头插法和尾插法以及HashMap中链表结点的插入方式 链表是一种常用的数据结构,它采用链式存储结构存储数据,相对于数组具有更灵活的操作和更高的效率。链表插入元素的方式有头插法和尾插法。
106 0
|
5月前
|
C++
数据结构循环链表之循环链表遍历 | 第三套
数据结构循环链表之循环链表遍历 | 第三套
25 0
|
6月前
|
算法 Java C++
单链表(面试算法题1)---学习链表的关键在于code
单链表(面试算法题1)---学习链表的关键在于code
27 0
|
8月前
|
存储 索引
【数据结构】链表的学习和介绍
【数据结构】链表的学习和介绍
49 0
|
9月前
|
存储 C++
链表操作:插入、删除与遍历
(笔者画图不易呜呜)链表是一种基本的数据结构,它可以用来存储一系列的元素,并且支持灵活的插入、删除操作。在计算机科学中,链表常常用于构建更复杂的数据结构,如栈、队列以及图等。
193 0