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

来源:互联网 发布:剑三帅气成男脸型数据 编辑:程序博客网 时间:2024/04/29 13:23

内容来自慕课网视频自己做的笔记: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就可以继续申请内存创建新节点

原创粉丝点击