链表的创建(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 ...
随机推荐
- c++ 面试题(海量数据篇)
1,在海量数据中找中位数: 题目如下: 只有2G内存的pc机,在一个存有10G个整数的文件,从中找到中位数,写一个算法. 解答:http://www.cnblogs.com/youxin/archiv ...
- linux环境:创建数据库用户,表空间,启动数据库
1.启动数据库 首先使用oracle用户登录Linux,然后在shell命令行中执行下面的命令:第一步:打开Oracle监听(先查看状态:oracle监听是否启动:lsnrctl status)$ l ...
- C++中的inline用法
- Rancher 2.0 简单使用 重要部分截取
学习地址 : https://rancher.com/docs/rancher/v2.x/en/quick-start-guide/ Install Rancher sudo docker run - ...
- TZOJ 2099 Sightseeing tour(网络流判混合图欧拉回路)
描述 The city executive board in Lund wants to construct a sightseeing tour by bus in Lund, so that to ...
- 735. Asteroid Collision彗星相撞后的消失数组
[抄题]: We are given an array asteroids of integers representing asteroids in a row. For each asteroid ...
- 22. Generate Parentheses产生所有匹配括号的方案
[抄题]: Given n pairs of parentheses, write a function to generate all combinations of well-formed par ...
- .net core 中使用ef 访问mysql
1.参考文档说修改项目文件添加,就得这么做,不然会报错 <ItemGroup> <DotNetCliToolReference Include="Microsoft.Ent ...
- 基于OpenCV的图书扫描识别程序开发
1.AndroidStudio环境配置 https://www.cnblogs.com/little-monkey/p/7162340.html
- Linux下nautilus的右键快捷菜单项设置
某一天我的Linux更新完后, 我照常在文件夹下点击右键想打开终端, 却发现右键快捷菜单没有Open in terminal的菜单项了. 在网上查找了一下, 结合自己系统的情况发现了解决办法. 由于我 ...