链 表

什么是链表?

链表是一种常见的重要的数据结构,是动态地进行存储分配的一种结构。

链表的组成:

头指针:存放一个地址,该地址指向第一个元素

结点:用户需要的实际数据和链接节点的指针

我们尝试根据下图建立链表:

#include <stdio.h>struct student
{long num;float score;struct student *next;
};void main()
{struct student a, b, c, *head;a.num = 10101;a.score = 89.5;b.num = 10103;b.score = 90;c.num = 10107;c.score = 85;head = &a;a.next = &b;b.next = &c;c.next = NULL;do{printf("%ld %5.1f\n", head->num, head->score);head = head->next;} while (head != NULL);
}

建立动态链表

所谓建立动态链表是指在程序执行过程中从无到有地建立起一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系。

作业:根据下面的分析写一程序建立一个含有学生(学号,成绩)数据的单向动态链表。

(约定:我们约定学号不会为零,如果输入的学号为0,则表示建立链表的过程完成,该结点不应连接到链表中。)

我们将以图文并茂的方式来展示链表的具体创建过程!!

我们约定学号不会为零,如果输入的学号为0,则表示建立链表的过程完成,该结点不应连接到链表中。

如果输入的p1->num不等于0,则输入的是第一个结点数据(n=1),令head=p1,即把p1的值赋给head,也就是使head也指向新开辟的结点p1所指向的新开辟的结点就成为链表中第一个结点。

再开辟一个结点并使p1指向它,并输入该结点的数据。

实现链表输出

源代码如下:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>#define LEN sizeof(struct student)struct student *creat();   //创建链表
void print(struct student *head);   //打印链表struct student
{int num;float score;struct student *next;
};int n; //全局变量,用来记录存放了多少数据。void main()
{struct student *stu;stu = creat();print(stu);printf("\n\n");system("pause");
}struct student *creat()
{struct student *head;struct student *p1, *p2;p1 = p2 = (struct student *)malloc(LEN);printf("Please enter the num :");scanf("%d", &p1->num);printf("Please enter the score :");scanf("%f", &p1->score);head = NULL;n = 0;while (p1->num){n++;if (1 == n){head = p1;}else{p2->next = p1;}p2 = p1;p1 = (struct student *)malloc(LEN);printf("\nPlease enter the num :");scanf("%d", &p1->num);printf("Please enter the score :");scanf("%f", &p1->score);}p2->next = NULL;return head;
}void print(struct student *head)
{struct student *p;printf("\nThere are %d records!\n\n", n);p = head;if (head){do{printf("学号为 %d 的成绩是: %f\n", p->num, p->score);p = p->next;} while (p);}
}

零基础入门学习C语言011讲:结构体与共用体(4)链表相关推荐

  1. 零基础入门学习C语言008讲:函数(4)

    8.7数组作为函数参数 数组可以作为函数的参数使用,进行数据传送.数组用作函数参数有两种形式. 一种是把数组元素(下标变量)作为实参使用: 另一种是把数组名作为函数的形参和实参使用. 8.7.1 数组 ...

  2. 零基础入门学习C语言

    注:这些都是我辛苦找的资料,希望能对大家有帮助,然后就是大家选择性的下载!我个人推荐小甲鱼20G的那个,一整套!还带工具和众多电子书!全部都是免费的! 郝斌先生的视频讲解也很仔细,但是没有实践作业布置 ...

  3. 位运算02 - 零基础入门学习C语言65(完)

    第十二章:位运算02 让编程改变世界 Change the world by program "取反"运算符(~) ~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1 ...

  4. 文件操作01 - 零基础入门学习C语言60

    第十一章:文件操作01 让编程改变世界 Change the world by program C文件概述 所谓"文件"是指一组相关数据的有序集合.这个数据集有一个名称,叫做文件名 ...

  5. 函数05 - 零基础入门学习C语言36

    第七章:函数05 让编程改变世界 Change the world by program 函数的嵌套调用 嵌套定义就是在定义一个函数时,其函数体内又包含另一个函数的完整定义. 然而,C语言不能嵌套定义 ...

  6. 函数09 - 零基础入门学习C语言40

    第七章:函数09 让编程改变世界 Change the world by program 课件同上一讲,详细讲解请看视频. [buy] 获得所有教学视频.课件.源代码等资源打包 [/buy] [Dow ...

  7. 指针01 - 零基础入门学习C语言41

    第八章:指针01 让编程改变世界 Change the world by program 指针啥玩意?似乎很神秘? 指针是C语言中的一个重要的概念,也是C语言的一个重要特色. 正确而灵活地运用它,可以 ...

  8. 数据类型,运算符和表达式02 - 零基础入门学习C语言03

    第二章:数据类型,运算符和表达式02 让编程改变世界 Change the world by program 整型变量 整型变量的分类(注意:这里占多少个字节跟系统和编译器规定有关!可以在编译器上自己 ...

  9. 顺序程序设计03 - 零基础入门学习C语言09

    第三章:顺序程序设计03 让编程改变世界 Change the world by program   题目:输入三角形的三边长,求三角形面积. 已知三角形的三边长a,b,c,则该三角形的面积公式为: ...

最新文章

  1. mysql 查看blob字段大小_MYSQL BLOB 字段大小以及个数的限制测试。
  2. 六年级小学python第四讲_python第四讲
  3. Qt Designer手册
  4. 剑指offer-跳台阶
  5. Dapper的动态查询生成器
  6. 材料的构成 —— 塑料
  7. Google Code Review 如何编写代码评论
  8. [改善Java代码]使用静态内部类提高封装性
  9. 中源幼儿园收费管理系统 v5.2.8 是什么
  10. Android事件机制深入探讨(一)
  11. windows bat批处理基础命令学习教程(转载)
  12. 数据分析(六)--聚合分组,交叉表,透视表,练习
  13. C++ _stdcall和__stdcall的区别
  14. OA常见问题和解决方案
  15. LTE: 小区特定参考信号功率与RRU发射功率的计算
  16. 服务器固态硬盘连接,技术支招:服务器中固态硬盘如何选?
  17. 用MFC编程时在源文件里经常看到的AFX或afx是什么意思?
  18. 智能网联「中国百强供应商」都有谁?8月30-31日现场揭晓
  19. 100个 ChatGPT 提示(Prompt)优化高质量提问案例
  20. amp; AMP; 会显示位 | Amp;aMp;amP;会原样显示

热门文章

  1. 华夏幸福创新中心携手入驻企业参展科博会 加速区域经济发展
  2. lvextend 逻辑卷扩容(xfs_growfs、resize2fs配合扩展文件系统)
  3. 【树莓派】一根网线将树莓派4B直连笔记本电脑的方法
  4. C++调用Python传入回调函数
  5. 阅读《基于CPSO和DE改进粒子群算法的无功优化仿真》的感想
  6. 华为eNSP配置MSTP(多实例生成树)
  7. python解析二维码_Python如何识别二维码
  8. 视频教程-美团团购订单系统优化实践-其他
  9. 学习技巧 - 学习观
  10. 互感器的同名端和正负极性(一次和二次侧的电压电流和方向的确定要求电磁学理论应用于实际线圈的物理属性,交变的电磁场互相产生公式,麦克斯韦方程,不用再深究)