动态创建链表及打印链表 (链表学习 一)
来源:互联网 发布:linux df产生文件 编辑:程序博客网 时间:2024/05/10 05:43
动态创建链表主要思想:定义三个执行结构体类型数据的指针,head,p1,p2,当输入的值p1->num不为0并且为第一个节点的时候,把该节点赋给头结点
p1这个指针,主要是用来指向刚输入过数据的节点,p2这个指针,主要负责把p1刚输入的数据的这个节点加到链表中来。当输入为0时程序结束,返回头结点,具体流程如下:
当我们输入:
1001,23,4
1002,34.5
1003,45.6
0,0
执行过程:
1.定义p1,p2并输入1001,23,4初始化p1,然后判断p1->num是否为0,不为0继续执行,程序中的n为记录节点个数
当节点数n==1的时候,把p1赋给头结点,p2->next = p1;此时p2 = head,也就是第一个节点
2.继续执行,输入1002,34.5,并初始化p1,此时n==2,执行p2->next = p1,也就是head->next = p1;就把p1新初始化的这个节点加入到链表中去了,然后p2 = p1,把p2指针又移动到最后一个节点,接续执行
3.添加第三个节点,与上面第2步一样
4.输入0,0创建链表结束
5.调用print函数打印链表,将头指针传过去,然后遍历打印链表
#include<stdio.h>#include<stdlib.h>#define LEN sizeof(struct Student)//初始化链表struct Student{ long num; float score; struct Student *next;};int n;struct Student* creat(void){ //定义函数,返回一个执行链表头的指针 struct Student *head; struct Student *p1,*p2; n = 0; //全局变量,记录节点的个数 p1 = p2 = (struct Student*)malloc(LEN); //开辟一个新单元 scanf("%ld,%f",&p1->num,&p1->score); head = NULL; while(p1->num != 0){ n = n+1; if(n==1){ //当为第一个节点的时候,把指针赋给头指针 head = p1; }else{ p2->next = p1; } p2=p1; p1 = (struct Student*)malloc(LEN); //开辟动态存储区,把初始地址赋给p1 scanf("%ld,%f",&p1->num,&p1->score); } p2->next = NULL; return(head);}void print(struct Student *head){ struct Student *p; printf("\nNow,These %d records are:\n",n); p = head; if(head != NULL){ do{ printf("%ld,%5.1f\n",p->num,p->score); p = p->next; }while(p != NULL); }}int main(){ struct Student *pt; pt = creat(); print(pt); return 0;}
阅读全文
0 0
- 动态创建链表及打印链表 (链表学习 一)
- 动态链表的创建及使用
- 创建动态链表
- [数据结构]链表创建、打印、反转
- 链表的创建和打印
- 链表的创建 打印 反转
- 链表的创建,插入,输出,打印
- 单向链表的创建与打印
- 链表的创建与增加、打印
- 数据结构:链表的创建和打印
- 实现单向循环链表的创建、测长、打印、插入、删除及逆置
- 动态链表的增删改查,打印销毁等基本操作及代码模块化(完整C语言代码!)
- 创建链表(一)
- 双向链表(创建、求长、打印、删除、插入)
- C语言实现线性结构创建动态链表的学习心得(一)
- 单链表学习笔记一 学生信息动态链表
- 一、创建数据库及创建表
- 链表操作 创建链表和打印链表
- swift 定时器的启用
- Triangle
- 小型购物系统
- 项目管理——产品文档规划
- 交通运输线
- 动态创建链表及打印链表 (链表学习 一)
- 如何识别代码中的乱码
- leetcode
- 【Hibernate】的Inverse属性
- 实现C++中的cout
- poj2155 二维线段树 区间修改
- Java中快速排序,冒泡排序和选择排序的实现
- Java并发工具类
- JAVA中ListIterator和Iterator详解与辨析