动态数据结构-动态建立链表
来源:互联网 发布:剑三帅气成男脸型数据 编辑:程序博客网 时间: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就可以继续申请内存创建新节点
阅读全文
0 0
- 动态数据结构-动态建立链表
- 建立动态链表
- 动态建立链表
- 建立动态链表
- 动态链表的建立—尾插法
- 简单静态、动态链表的建立
- 【c++程序】动态链表的建立
- C语言:建立动态链表
- 细节决定未来(建立动态链表)
- 数据结构---动态顺序表
- 【数据结构】动态顺序表
- 数据结构——动态链表
- 数据结构——动态链表
- 数据结构笔记之动态链表
- 动态数据结构
- 动态数据结构
- 数据结构_动态顺序表
- 【C语言】建立动态链表并输出链表
- 牛客网的java面试题
- WUST 1906 演讲大厅安排,饥饿的牛(dp+线段覆盖经典)
- mysql数据库实现读写分离
- 使用Androidstudio时按generate键,提示IllegalArgumentException: cannot add an action twice: Generate Butterkn
- STL库容器 vector assign赋值函数
- 动态数据结构-动态建立链表
- 166链表倒数第n个节点
- Python 加载数据
- JAVA关键字使用
- HTML笔记(部分新增的HTML5元素)
- HttpClient基础知识(java爬虫03)
- 方言 —— 各地方言
- 提携别人,也是完善自己
- 自制操作系统