• 初探链表


    《啊哈!算法》第四章---链表

    本节讲的很简单,通俗易懂,适合零基础或基础薄弱的初学者入门,废话少说,以下是自己做的笔记。

    一、什么是链表

    诸如以下形式

    称为单链表(有了单链表,肯定就有双链表,循环链表之类的啦)

    接下来需要往链表中插入6,操作如下:

    二、针对上面例子详细代码解释如下

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 //这里创建一个结构体用来表示链表的结点类型
     5 typedef struct node
     6 {
     7     int data;
     8     struct node *next;
     9 }List;
    10 int main()
    11 {
    12     List *head,*p,*q,*t;
    13     int i,n,a;
    14     scanf("%d",&n);
    15     head = NULL;//头指针初始为空
    16     for(i=1;i<=n;i++)//循环读入n个数
    17     {
    18         scanf("%d",&a);
    19         //动态申请一个空间,用来存放一个结点,并用临时指针p指向这个结点
    20         p=(List *)malloc(sizeof(List));
    21         p->data=a;//将数据存储到当前结点的data域中
    22         p->next=NULL;//设置当前结点的后继指针指向空,也就是当前结点的下一个结点为空
    23         if(head==NULL)
    24             head=p;//如果这是第一个创建的结点,则将头指针指向这个结点
    25         else
    26             q->next=p;//如果不是第一个创建的结点,则将上一个结点的后继指针指向当前结点
    27             q=p;//指针q也指向当前结点
    28     }
    29     printf("请输入待插入的数字:");
    30     scanf("%d",&a);//读入待插入的数
    31     t=head;//从链表头部开始遍历
    32     while(t!=NULL)//当没有到达链表尾部的时候循环
    33     {
    34         if(t->next->data > a)//如果当前结点下一个结点的值大于待插入数,将数插入到中间
    35         {
    36             p=(List *)malloc(sizeof(List));//动态申请一个空间,用来存放新增结点    
    37             p->data=a;
    38             p->next=t->next;//新增结点的后继指针指向当前结点的后继指针所指向的结点
    39             t->next=p;//当前结点的后继指针指向新增结点
    40             break;//插入完毕退出循环
    41         }
    42         t=t->next;//继续下一个结点
    43     }
    44     //输出链表中的所有数
    45     t=head;
    46     while(t!=NULL)
    47     {
    48         printf("%d ",t->data);
    49         t=t->next;//继续下一个结点
    50     }
    51     printf("
    
    "); 
    52     // 释放指针(free释放掉指定参数指针指向的内存,并返回void) 
    53     free(head);
    54     free(p);
    55     free(q);
    56     free(t);
    57     
    58     return 0;
    59 }

    注:此节还提到了free()函数用来释放内存空间,安全起见需要在合适的位置适当时候释放空间  具体关于free()函数的讲解参考博客:

    https://blog.csdn.net/Leisure512/article/details/4978476

    https://blog.csdn.net/henulwj/article/details/8234365

  • 相关阅读:
    Docker 我的常用命令
    Docker 已运行容器修改配置
    Docker .NET Core项目run起来
    Docker 安装运行mssql-server-linux
    Docker Mssql 还原数据库到Linux
    Nginx(四)------nginx 负载均衡
    nginx(二)------nginx.conf 配置文件
    Nginx(一)------简介与安装
    MySQL主从复制作用和原理
    设计模式:策略模式
  • 原文地址:https://www.cnblogs.com/guohaoblog/p/9231966.html
Copyright © 2020-2023  润新知