• 单向链表浅析(小学生都能看懂)


    个人理解:

    某种程度上可以说,链表就是结构体。所以学链表之前先去学结构体

    这个结构体包含我们想记录的数据,还包含一个指针,指向下一个结构体,如此反复套娃,直到这个指针最终指向空,这一堆结构体便被称为链表。

    一.创建链表

    我们只需要把它的头搞出来就行。

    首先是创建一个结构体

    1. #include
    2. using namespace std;
    3. typedef struct listnode{
    4. int num;
    5. struct listnode *next;
    6. }mynode;

    然后创个头

    1. int main()
    2. {
    3. mynode *head;
    4. mynode *list;
    5. mynode *temp;
    6. head=(mynode*)malloc(sizeof(mynode));
    7. head->next=NULL;//创建头结点
    8. list=(mynode*)malloc(sizeof(mynode));
    9. list=head;//给咱的链表装个头上去
    10. }

    二.链表添加节点 

    1. for(int i=0;i<5;i++)
    2. {
    3. int x;
    4. cin>>x;
    5. temp=(mynode*)malloc(sizeof(mynode));
    6. temp->num=x;
    7. temp->next=NULL;
    8. list->next=temp;
    9. list=temp;
    10. }

    三.链表输出

    1. temp=head->next;
    2. if(temp->next==NULL)
    3. cout<
    4. else
    5. {
    6. while(temp!=NULL)
    7. {
    8. cout<num<<" ";
    9. temp=temp->next;
    10. }
    11. cout<
    12. }

    完整代码

    1. #include
    2. using namespace std;
    3. typedef struct listnode{
    4. int num;
    5. struct listnode *next;
    6. }mynode;
    7. int main()
    8. {
    9. mynode *head;
    10. mynode *list;
    11. mynode *temp;
    12. head=(mynode*)malloc(sizeof(mynode));
    13. head->next=NULL;//创建头结点
    14. list=(mynode*)malloc(sizeof(mynode));
    15. list=head;//给咱的链表装个头上去
    16. for(int i=0;i<5;i++)
    17. {
    18. int x;
    19. cin>>x;
    20. temp=(mynode*)malloc(sizeof(mynode));
    21. temp->num=x;
    22. temp->next=NULL;
    23. list->next=temp;
    24. list=temp;
    25. }
    26. temp=head->next;
    27. if(temp->next==NULL)
    28. cout<
    29. else
    30. {
    31. while(temp!=NULL)
    32. {
    33. cout<num<<" ";
    34. temp=temp->next;
    35. }
    36. cout<
    37. }
    38. }

    四.删除节点

     让指向要删除节点的指针指向要删除节点的下一个节点

    例题:

    锯齿矩阵是指每一行包含的元素个数不相同的矩阵,比如:

    1

    3 5 2 6 1

    2

    2 3 4

    3

    1 6 2 7

    初始时矩阵为空,读入 mm 对整数 (x,y)(x,y),表示在第 xx 行的末尾加上一个元素 yy。

    输出最终的锯齿矩阵。

    输入格式

    第一行输入两个整数 n,m\ (1 \leq n,m \leq 10000)n,m (1≤n,m≤10000),其中 nn 表示锯齿数组的行数,mm 表示插入的元素总数。

    接下来一共 mm 行,每行两个整数 x,y\ (1 \leq x \leq n, 0 \leq y \leq 10000)x,y (1≤x≤n,0≤y≤10000),表示在第 xx 行的末尾插入一个元素 yy。

    输出格式

    一共输出 nn 行,每行若干个用空格分隔的整数。如果某行没有任何元素,则输出一个空行

    输出时每行末尾的多余空格,不影响答案正确性

    样例输入复制

    3 12
    1 3
    2 2
    2 3
    2 4
    3 1
    3 6
    1 5
    1 2
    1 6
    3 2
    3 7
    1 1

    样例输出复制

    3 5 2 6 1
    2 3 4
    1 6 2 7
    1. #include
    2. using namespace std;
    3. typedef struct ANode{
    4. int num;
    5. struct ANode *next;
    6. }ArcNode;
    7. int main()
    8. {
    9. int n,m;
    10. cin>>n>>m;
    11. ArcNode *head[n];
    12. ArcNode *list[n];
    13. ArcNode *temp;
    14. for(int i=0;i
    15. {
    16. head[i]=(ArcNode*)malloc(sizeof(ArcNode));
    17. head[i]->next=NULL;//创建头结点
    18. list[i]=(ArcNode*)malloc(sizeof(ArcNode));
    19. list[i]=head[i];//给咱的链表装个头上去
    20. }
    21. for(int i=0;i
    22. {
    23. int x,y;
    24. cin>>x>>y;
    25. temp=(ArcNode*)malloc(sizeof(ArcNode));
    26. temp->num=y;
    27. temp->next=NULL;
    28. list[x-1]->next=temp;
    29. list[x-1]=temp;
    30. }
    31. for(int i=0;i
    32. {
    33. temp=head[i]->next;
    34. if(temp->next==NULL)
    35. cout<
    36. else
    37. {
    38. while(temp!=NULL)
    39. {
    40. cout<num<<" ";
    41. temp=temp->next;
    42. }
    43. cout<
    44. }
    45. }
    46. }

     

     

  • 相关阅读:
    生命在于折腾——皮卡丘靶场源码审计(二)
    强化学习科研知识必备(数据库、期刊、会议、牛人)
    安装 docker 和 jenkins
    rocketMQ 安装与启动
    飞利浦Fidelio B97全景声家庭影院,让你在家享受“暑期档”
    文生图王者登场:Stable Diffusion 3 Medium正式开源
    Linux高性能服务器编程——ch7笔记
    如何有效防止公司内部的信息泄露?
    SpringBoot - 配置文件application.yml使用详解
    html写一个table表
  • 原文地址:https://blog.csdn.net/weixin_61133168/article/details/126198777