数据结构中链表的头插程序

#include<stdio.h>
#include<stdlib.h>

struct node
{
    int num;

    struct node * next;
    //结构体类型的成员是指针,其指向结构体的,结构体的名字只能是结构体自己的
};

// void create_link(Link head)
// {
//     head=NULL;
    
// }

typedef struct node Node;//struct node结构体类型,不是指针,定义类型
typedef Node* Link;//struct node*结构体类型的指针取名为Link(指针变量)

Link  create_link(Link * head)    //创建空链表,没有节点
{
    *head=NULL;                   //head指向空NULL
    return *head;
}

void create_node(Link * new_node) //我所创建的新的(节点)链表的值
                                  //create node分配一个新的空间分配地址,并返回来
{
    *new_node=(Link)malloc(sizeof(Node));
    //malloc分配空间,空间只要分配成功,节点就有了,节点必须真实存在
    //分配空间时,结构体是将来节点的构成方式(值域、指针定义、指向)
    //malloc返回的是void*,转换成结构体类型的指针Link,指向你所分配的起始位置
    //用来当节点使用的,new_node指向新的节点的,
    //输出函数,利用函数这个参数要带回你所创建的新节点的起始地址
    //指针作为函数参数,参数传递方向是双向,形参影响实参,
    //一定是对形参的间接运算,取内容*new_node是一级指针
    //new_node是二级指针
}

void insert_node_head(Link * head,Link new_node)
{
    new_node->next=*head;
    *head=new_node;
}

void display_link(Link head)    //head是形参,已获得主函数的链表
{
    Link p=NULL;
    p=head;                     //head不一定可移动,p指针做引领,指向头节点
    while(p!=NULL)
    {
        printf("%d\n",p->num);  //结构体里:1、指针变量->成员;2、普通变量.成员
        p=p->next;              //指针变量p指向下一个节点
    }
     
}

int main()
{
    Link head;//Node * head;   struct node * head;
    //定义了指向链表的指针;link定义head,是一个指针;头指针
    Link new_node=NULL;
    int i;

    create_link(&head);//创建链表,带回新的链表的起始位置
                   //二维指针能带回(返回)一个地址(指针)
                   //head原本没有指向,是空的(没有地址),创建链表以后,head指向创建的链表
                   //链表可为空,“有节点无链表”是不行的    
    for(i=0;i<10;i++)
    {
        create_node(&new_node);
        //创建节点,参数取二级指针,因为修改以后需要带回新的值,新创建的节点的起始位置
        new_node->num=i+1;

        insert_node_head(&head,new_node);
        //头指针就是一个链表,把新创建的节点带到头指针所指向的链表
        //head 指向新的链表,会改变头指针的指向,返回新的地址
        //链表是顺序访问,&head是二级指针,new_node是一级指针
        //判断二级指针:需不需要传递新的值,二级指针需要返回新的地址
        //节点new_node传给head链表中,head不改变new_node的位置———依据
    }
    display_link(head);
    return 0;
}

结果:
 

judy@judy-virtual-machine:~/桌面/preview$ gcc love6.c -olove6
judy@judy-virtual-machine:~/桌面/preview$ ./love6
10
9
8
7
6
5
4
3
2
1 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值