链表的创建(C语言实现)
学习链表之前,我们要知道为什么要引入链表。
C语言中的数组使用之前,我们必须要定义数组的大小。但是当我们不知道数据个数(或者很大)时,定义数组大小就成了一个困扰,而且对于这么多数据的处理也会很麻烦。所以,定义“动态大小”,“单独操作几个元素”就成了此时一个方便的选择。
接下来我们来学习如何创建一个链表。
1.什么是结点
所谓节点,就是用于存放数据与指向下一节点的地址。
节点的代码实现:
struct node{
int data;
struct node *next;
};
2.用指针指向节点
创建节点后,我们要用第一个指针指向该节点,称为头指针,同时要初始化头指针。
struct node *head;
head=NULL;
3.向节点中输入数据并创建临时指针指向该节点
我们先创建临时指针并申请动态空间去指向一个节点,这样就可以通过指针向节点中输入数据了。
struct node *p,*q;
p=q=(struct node *)malloc(sizeof(struct node));//申请动态空间
scanf("%d",&(p->data));
待会会讲到指针q的作用。
4.判断是否为第一个节点
如果输入的是第一个(组)数据,那么应用头指针指向这个节点。
if(head==NULL)head=p;
否则,就将上一个指针的后继节点指向该节点。
如何实现呢?
这时,我们需要提前创建一个新指针用于存放上一指针的信息。即上面已经定义了的q指针。然后将上一指针(q)的后继节点指向当前节点(p)
else q->next=p;
5.指向当前节点并输入下一个(组)数据
连接上一节点的后继节点与当前节点后,我们需要将上一节点更新为当前节点。输入下一个(组)数据的方法与第三点的申请动态空间和向节点中输入数据相同。
q=p;
p=(struct node *)malloc(sizeof(struct node));
scanf("%d",&(p->data));
6.结束输入
数据输入完后,我们需要将最后一个数据的下一节点指向NULL。
q->next=NULL;
下面是完整的代码实现:
#include<stdio.h>
#include<malloc.h>
struct node{
int data;
struct node *next;
};
int main()
{
struct node *head,*p,*q;
head=NULL;
p=q=(struct node *)malloc(sizeof(struct node));
scanf("%d",&(p->data));
while(p->data!=)
{
if(head==NULL)head=p;
else q->next=p;
q=p;
p=(struct node *)malloc(sizeof(struct node));
scanf("%d",&(p->data));
}
q->next=NULL;
while(head)
{
printf("%d\n",head->data);
head=head->next;
}
return ;
}
谢谢观看,如有问题欢迎提出并指正。
链表的创建(C语言实现)的更多相关文章
- [数据结构】【c语言】链表的创建和遍历
第一次写代码的博客,一个刚刚接触的新手,来这里主要是为了记录自己,方便自己以后浏览,也欢迎大家指正.先来个简单的,动态链表的创建和遍历. #include<stdio.h> #includ ...
- C 单向链表的创建、插入及删除
链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用.链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节 ...
- java实现单链表的创建、增、删、改、查
文章目录 单链表的创建.增.删.改.查 1.增加一个节点 2.删除一个节点 3.修改某一个节点 5.遍历单链表 单链表的创建.增.删.改.查 双向链表的增删改查:https://blog.csdn.n ...
- C语言 链表的创建--打印--逆置--新增--删除--排序--释放
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string. ...
- 链表的创建、测长、排序、插入、逆序的实现(C语言)
#include <stdio.h> #define END_elem 0 struct node { int date; struct node * next; }; //链表创建 no ...
- C语言写单链表的创建、释放、追加(即总是在最后的位置增加节点)
昨天周末给学妹讲了一些指针的知识,本来我对指针就是似懂非懂的状态,经过昨天一讲,我对指针的学习就更深刻了 果然给别人讲课也是学习的一个方法.加上最近复习数据结构,发现我的博客里没有链表的博文,所以趁这 ...
- c语言之单链表的创建及排序
今天对之前学习过的链表知识进行简单的总结顺便写点代码:创建一个链表有头插法跟尾插法两种,在下面代码中我们为结点分配的内存实在堆上分配的,因此需要我们手动释放,释放用free()函数 下面代码贴出具体代 ...
- C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码
实现个算法,懒得手写链表,于是用C++的forward_list,没有next()方法感觉很不好使,比如一个对单向链表的最简单功能要求: input: 1 2 5 3 4 output: 1-> ...
- C语言:创建动态单向链表,创建完成后,输出每一个节点的数据信息。
// // main.c // dynamic_link_list // // Created by ma c on 15/8/5. // Copyright (c) 2015. All ri ...
随机推荐
- 原子性: Interlocked 类
public class CounterNoLock:CountBase { private int _count; public int Count { get { return _count; } ...
- wdk驱动开发的特点
本文介绍WDK开发的一些特点.与应用层开发的差异性,不能混为一谈. 一.函数的调用点 在内核编程中,一个函数往往有多个调用点,而应用层中一个函数一般只在main里面有调用点.内核函数调用点一般在: 1 ...
- python基础 ---- 使用pyCharm 调试
debug -- 为了分析程序的异常 单步调试 1.设置断点 2.debug.启动 3.监控变量
- Eclipse Java注释模板设置
类型(Types)注释标签(类的注释): /** * @ClassName: ${type_name} * @Description: ${todo}(这里用一句话描述这个类的作用) * @autho ...
- 完全理解 Python 迭代对象、迭代器、生成器
完全理解 Python 迭代对象.迭代器.生成器 2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 分享到: 原文出处: liuzhijun 本文源自RQ作者 ...
- EasyWeChat使用(laravel框架下)
最近做了个项目是关于微信网页开发的,今天记录下在做项目中的关于微信这块遇到的一些坑 关于微信这块,用的是EasyWeChat,提高了开发的效率.在看EasyWeChat这个文档的时候发现了有专门针对l ...
- javaweb开发.调试
一.快速调试一个类 1.类里面写public static void main(String[] args) throws Exception{}方法 2.该类上右键->Run As->J ...
- github管理项目
1.在GitHub上创建一个项目,然后拷贝git地址. 2.在本地打开GIT CMD,然后建立一个文件夹,输入git clone 上面拷贝的git地址. 3.文件夹下会多出一个以你创建的项目名字的文件 ...
- 20172325 2018-2019-2 《Java程序设计》第九周学习总结
20172325 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 图的定义 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和 ...
- 21. pt-stalk
pt-stalk 适用场景:MySQL Server 性能波动出现的频率很低.例如.几天一次MySQL Server 性能波动出现的机率很快.例如.几秒闪过 pt-stalk h=192.168.10 ...