本系列文章简要介绍链表的相关知识。

本文是系列文章的第一篇,将介绍创建单向动态链表输出单向链表内容的方法,并给出代码示例。

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 的连续空间。

链表简介(一)——创建单向动态链表及输出单向链表内容相关推荐

  1. C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。

    LinkedList.cC exerciseCreated by y liu on 15/10/1.Copyright © 2015年 y liu. All rights reserved.//库&a ...

  2. 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点

    第 13 题(链表): 题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表 的尾指针. 链表结点定义如下: struct ListNode { int m_nKey ...

  3. 用C++实现单链表的创建、逆置和输出 的两种方法

    http://blog.csdn.net/lfeng_coding/article/details/47300563 题目描述:在已知单链表头节点的情况下,设计算法逆置单链表并输出 方法一:采用首先将 ...

  4. 一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针

    输入一个单向链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针 typedef struct _node_t {struct _node_t *next;int data; }Nod ...

  5. 华为机试HJ51:输出单向链表中倒数第k个结点

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针. ...

  6. DSt:数据结构的简介、最强学习路线(逻辑结构【数组-链表-栈和队列/树-图-哈希】、物理结构、数据运算【十大排序/四大查找-图三大搜索-树三大遍历】、高级算法【贪心/分治/动态规划】之详细攻略

    DSt:数据结构的简介.最强学习路线(逻辑结构[数组-链表-栈和队列/树-图-哈希].物理结构[元素/关系].数据运算[十大排序/四大查找-图三大搜索-树三大遍历].高级算法[贪心/分治/动态规划]) ...

  7. 创建链表小细节(引用传递和值传递以及链表中的LinkList L、LinkList *L、LinkList L)

    函数参数传递的两种方式为值传递和引用传递 目录 函数参数传递的两种方式为值传递和引用传递 1.传值方式传参 2.引用方式传参 3.通过一段代码运行进一步理解传指针(包括二级指针)和传指针的引用 4.总 ...

  8. 单链表的基本操作-插入结点、删除结点、新建链表、查找结点位置

    ** C语言新手小白的学习笔记-------------目前持续更新中 ** 本人90后电气工程及其自动化大学生,大二开始接触C语言,写过前端,Python,但是都不精通,通过许多认识后明白了自身的许 ...

  9. 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...

    点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...

  10. C语言经典例73-反向输出一个链表

    目录 1 题目 2 分析 2.1 方法1-原地逆置 2.2 方法2-递归 3 实现 3.1 实现1-原地逆置 3.2 实现2-递归 4 运行结果 1 题目 反向输出一个链表,链表结构为: typede ...

最新文章

  1. 以 OSGi 包的形式开发和部署 Web 服务
  2. java适配器模式 场景_Java设计模式之《适配器模式》及应用场景
  3. jqgrid ajax reload,jqgrid“reloadGrid”动作后将数据重新加载到文本框
  4. oracle之单行函数1
  5. java创建的zip没写入权限,java中的zip创建错误
  6. 编写第一个OpenACC程序
  7. [转载]IIS 6.0配置HTTP压缩的步骤
  8. c语言编程三次方程,c语言求三次方程的根程序设计
  9. MSP430F149串口收发程序详解
  10. android高德地图关键字搜索,关键字搜索-POI搜索-示例中心-JS API 示例 | 高德地图API...
  11. WindowsXP注册表详解
  12. matlab如何画极零图,用MATLAB画零极点图.ppt
  13. Android项目架构图
  14. SOF文件生成JIC文件
  15. opencv_图像修复
  16. FCN的学习及理解(Fully Convolutional Networks for Semantic Segmentation)
  17. 云端数据仓库的模式选型与建设
  18. JavaWeb开发分享:WRO
  19. 外媒:京东方正寻求为苹果iPhone供应OLED屏幕
  20. python上台阶问题_Python解决N阶台阶走法问题的方法

热门文章

  1. 2017年上半年软件设计师试题-04
  2. Data source rejected establishment of connection, message from server: Too many connections
  3. 4.1 - 《机器学习基石》Home Work 1 Q.15-17
  4. FMS集群的安装和配置
  5. 整数实例hdu2041(超级楼梯)
  6. Linux查看机器的硬件信息
  7. 使用ImageIO.write上传二维码文件时候,提示系统找不到指定路径
  8. 如何更优雅的写for循环
  9. 浅谈代码审计入门实战:某博客系统最新版审计之旅
  10. angular2组件通讯