链表简介(一)——创建单向动态链表及输出单向链表内容
本系列文章简要介绍链表的相关知识。
本文是系列文章的第一篇,将介绍创建单向动态链表和输出单向链表内容的方法,并给出代码示例。
1 概述
链表(linked list)是一个数据的集合,其中每个元素包含下一个元素的地址,即每个元素包含两部分内容:数据(data)和链(link)。数据部分包含可用的信息;链则将数据连在一起,它包含一个指向链表中下一个元素的指针(地址)。
说明:链表中的元素习惯上被称为节点。
链表是动态地进行存储分配的一种数据结构,与数组相比,链表可以根据需要动态地开辟内存单元,并且链表中的节点在内存中是非连续的。
2 创建单向动态链表
下面通过伪代码的形式介绍创建单向动态链表的算法。
算法:CreateLinkedlist()
目的:创建单向动态链表
前提:无
后续:无
返回:创建的链表
{head <- nullnode_num <- 0tail <- new <- malloc(node) // allocate new space(*new).data <- datawhile ((*new).data != 0) // condition of finishing linked list creation{node_num <- node_num + 1if (1 == node_num){head <- new;}else{(*tail).link <- new // link tail and newtail <- new // move location of tail to new}new <- malloc(node)(*new).data <- data}(*tail).link <- nullreturn head
}
3 输出单向链表内容
下面通过伪代码的形式介绍输出单向链表内容的算法。
算法:PrintLinkedlist(list)
目的:输出单向链表内容
前提:链表(头指针)
后续:无
返回:无
{walker <- listwhile (walker != null){print (*walker).datawalker <- (*walker).link}
}
4 代码示例
根据上述内容,可以编写创建单向动态链表及输出单向链表内容的代码示例。
代码示例内容如下:
#include <stdio.h>
#include <malloc.h>#define STRUCT_LEN sizeof(struct student)struct student
{int stu_num; /* student number */float stu_score; /* student score */struct student* next;
};int main()
{/* declaration of func */struct student* create(void);void print(struct student * list);struct student* list;list = create();print(list);return 0;
}/*
* this is the create linked list function.
* when student number is 0, create operation finish.
*/
struct student* create(void)
{struct student* head; /* head pointer name(the name of linked list) */struct student* tail; /* tail node */struct student* new; /* new node */int node_num = 0; /* node numbers of linked list */head = NULL;/* allocate a new code space */tail = new = (struct student*)malloc(STRUCT_LEN);printf("please input student number and score(delimited by SPACE): \n");scanf("%d %f", &(*new).stu_num, &(*new).stu_score);while ((new != NULL) && ((*new).stu_num != 0)){/* node number add one */node_num = node_num + 1;/* first node */if (1 == node_num){head = new;}else{/* let tail point new node, link tail and new */(*tail).next = new;/* move location of tail to new node */tail = new;}new = (struct student*)malloc(STRUCT_LEN);scanf("%d %f", &(*new).stu_num, &(*new).stu_score);}(*tail).next = NULL;return head;
}/*
* this is the print linked list content function.
*/
void print(struct student * list)
{struct student *walker;walker = list;printf("The linked list contents(student number and score) as followed:\n");printf("[student number] [student score]\n");while (walker != NULL){printf("%d %-f\n", (*walker).stu_num, (*walker).stu_score);walker = (*walker).next;}return;
}
上述代码的编译及运行结果如下:
说明:
- 在上述代码示例中,链表存储单元的动态开辟是通过 malloc 函数实现的。malloc 函数原型为“void* malloc(unsigned int size);”,其作用是在内存的动态存储区中分配一个长度为 size 的连续空间。
链表简介(一)——创建单向动态链表及输出单向链表内容相关推荐
- C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
LinkedList.cC exerciseCreated by y liu on 15/10/1.Copyright © 2015年 y liu. All rights reserved.//库&a ...
- 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
第 13 题(链表): 题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表 的尾指针. 链表结点定义如下: struct ListNode { int m_nKey ...
- 用C++实现单链表的创建、逆置和输出 的两种方法
http://blog.csdn.net/lfeng_coding/article/details/47300563 题目描述:在已知单链表头节点的情况下,设计算法逆置单链表并输出 方法一:采用首先将 ...
- 一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针
输入一个单向链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针 typedef struct _node_t {struct _node_t *next;int data; }Nod ...
- 华为机试HJ51:输出单向链表中倒数第k个结点
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针. ...
- DSt:数据结构的简介、最强学习路线(逻辑结构【数组-链表-栈和队列/树-图-哈希】、物理结构、数据运算【十大排序/四大查找-图三大搜索-树三大遍历】、高级算法【贪心/分治/动态规划】之详细攻略
DSt:数据结构的简介.最强学习路线(逻辑结构[数组-链表-栈和队列/树-图-哈希].物理结构[元素/关系].数据运算[十大排序/四大查找-图三大搜索-树三大遍历].高级算法[贪心/分治/动态规划]) ...
- 创建链表小细节(引用传递和值传递以及链表中的LinkList L、LinkList *L、LinkList L)
函数参数传递的两种方式为值传递和引用传递 目录 函数参数传递的两种方式为值传递和引用传递 1.传值方式传参 2.引用方式传参 3.通过一段代码运行进一步理解传指针(包括二级指针)和传指针的引用 4.总 ...
- 单链表的基本操作-插入结点、删除结点、新建链表、查找结点位置
** C语言新手小白的学习笔记-------------目前持续更新中 ** 本人90后电气工程及其自动化大学生,大二开始接触C语言,写过前端,Python,但是都不精通,通过许多认识后明白了自身的许 ...
- 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...
点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...
- C语言经典例73-反向输出一个链表
目录 1 题目 2 分析 2.1 方法1-原地逆置 2.2 方法2-递归 3 实现 3.1 实现1-原地逆置 3.2 实现2-递归 4 运行结果 1 题目 反向输出一个链表,链表结构为: typede ...
最新文章
- 以 OSGi 包的形式开发和部署 Web 服务
- java适配器模式 场景_Java设计模式之《适配器模式》及应用场景
- jqgrid ajax reload,jqgrid“reloadGrid”动作后将数据重新加载到文本框
- oracle之单行函数1
- java创建的zip没写入权限,java中的zip创建错误
- 编写第一个OpenACC程序
- [转载]IIS 6.0配置HTTP压缩的步骤
- c语言编程三次方程,c语言求三次方程的根程序设计
- MSP430F149串口收发程序详解
- android高德地图关键字搜索,关键字搜索-POI搜索-示例中心-JS API 示例 | 高德地图API...
- WindowsXP注册表详解
- matlab如何画极零图,用MATLAB画零极点图.ppt
- Android项目架构图
- SOF文件生成JIC文件
- opencv_图像修复
- FCN的学习及理解(Fully Convolutional Networks for Semantic Segmentation)
- 云端数据仓库的模式选型与建设
- JavaWeb开发分享:WRO
- 外媒:京东方正寻求为苹果iPhone供应OLED屏幕
- python上台阶问题_Python解决N阶台阶走法问题的方法
热门文章
- 2017年上半年软件设计师试题-04
- Data source rejected establishment of connection, message from server: Too many connections
- 4.1 - 《机器学习基石》Home Work 1 Q.15-17
- FMS集群的安装和配置
- 整数实例hdu2041(超级楼梯)
- Linux查看机器的硬件信息
- 使用ImageIO.write上传二维码文件时候,提示系统找不到指定路径
- 如何更优雅的写for循环
- 浅谈代码审计入门实战:某博客系统最新版审计之旅
- angular2组件通讯