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

xiaoxiao2021-02-28  9

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

转载请注明原文地址: https://www.6miu.com/read-1250390.html

最新回复(0)