动态数据结构-动态建立链表

内容来自慕课网视频自己做的笔记:http://www.imooc.com/video/8205/0

#include <stdio.h>
#include <stdlib.h>
struct weapon
{
    int price;
    int atk;
    struct weapon * next;//定义一个struct weapon 类型的指针变量next,用来存放下一个节点的地址(指向下一个节点)。
};

struct weapon * create()//需要一个创建链表的函数,函数的返回值类型是struct weapon *类型
{
    struct weapon *head;//定义一个头指针
    struct weapon * p1, * p2;//**p1 指向当前新创建的节点,p2指向上一个节点**
    int n = 0;//用来记录当前链表中的节点个数
    p1 = p2 = (struct weapon*)malloc(sizeof(struct weapon));
    scanf"%d,%d", &p1->price,&p2->atk);//需要从键盘输入武器的价格和攻击力赋给p1所指的第一个节点,第一个节点是淡出做处理的
    head = NULL//由于一开始链表是不存在的,所以先给链表一个初值:空
     while(p1->price != 0)//约定什么时候让输入结束,也就是说我们总共录入几个信息,比方说我想录三个信息,在第四个信息的时候不想录入了,约定price = 0就不连接到链表里了
     {
        n++;
        if (n == 1)   head = p1;//第一个添加到链表中的节点,我们做特殊处理,使head指向第一个元素
        else  p2->next = p1;//如果不是第一次输入,我们就让当前节点的前一个节点的next指向当前的这个节点,我们会用p2保存之前创建的节点地址
        p2 = p1;//用p2保存之前创建的节点地址,然后下面再创建新的地址赋给p1,就形成了,p1保存当前节点地址,p2保存前一个节点地址
        p1 = (struct wepaon *)malloc(sizeof(struct weapon));再创建新的地址赋给p1,开辟了一个新的存储区
         scanf("%d,%d",&p1->price,&p1->atk)//开辟了一个新的存储区之后又开始了输入环节
    }
    p2->next = NULL;
    return (head);
}

int main()
{
    struct weapon *p;
    p = creat();//把creat的返回值赋给p,就是链表的头指针
    printf("%d,%d",p->price,p->atk);//打印的第一个节点的值
    return 0;
}

总结:p1用来保存当前的节点,创建完后挂在前面节点后面,即就是p2的后面,挂好后呢,因为我们还要继续创建新节点,然后挂在前面节点上,依次循环永不停息,所以得更新前面节点,就把p2指到p1,这样p1就可以继续申请内存创建新节点

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值