C语言高级进阶

链表是由一系列互相连接的节点组成的数据结构,这种数据结构非常有用,是实现队列和栈的基础。

学习内容

这一章我们继续单链表的学习,实现一个无头单链表的创建,插入,按值查找,显示以及销毁。代码来自于(B站)史上最强最细腻的linux嵌入式C语言学习教程【李慧芹老师】,需要学习的童鞋自行搜索观看,此处不多介绍。

学习产出

nohead.h

#ifndef __NOHEAD_H__
#define __NOHEAD_H__#define NAMESIZE 32struct score_st
{int id;char name[NAMESIZE];int math;int chinese;
};struct node_st
{struct score_st data;struct node_st *next;
};int list_insert(struct node_st **list,struct score_st *data);void list_show(struct node_st*);int list_delete(struct node_st **);struct score_st * list_find(struct node_st *, int id);void list_distroy(struct node_st *);#endif /

nohead.c

#include <stdio.h>
#include <stdlib.h>
#include "nohead.h"int list_insert(struct node_st **list, struct score_st *data)
{struct node_st *new;new = malloc(sizeof(*new));if(NULL == new){return -1;}new->data = *data;new->next = *list;*list = new;return 0;}void list_show(struct node_st* list)
{struct node_st *cur;for(cur = list; cur != NULL; cur = cur->next){printf("%d %s %d %d\n", cur->data.id, cur->data.name, cur->data.math, cur->data.chinese);}
}int list_delete(struct node_st **list)
{struct node_st *cur;if(NULL == *list)return -1;cur = *list;*list = (*list)->next;free(cur);return 0;
}struct score_st * list_find(struct node_st *list, int id)
{struct node_st *cur;for(cur = list; cur != NULL; cur = cur->next){if(cur->data.id == id){//            printf("%d %s %d %d\n", cur->data.id, cur->data.name, cur->data.math, cur->data.chinese);return &cur->data;}}return ;}void list_distroy(struct node_st *list)
{struct node_st *cur;if(NULL == list){return ;}for(cur = list; cur != NULL; cur = list){list = cur->next;free(cur);}
}

main.c中进行测试

#include <stdio.h>
#include <stdlib.h>#include "nohead.h"int main()
{struct node_st *list = NULL;struct score_st tmp;int ret;for( int i = 0; i < 7; i++){tmp.id = i;snprintf(tmp.name, NAMESIZE, "stu%d",i);tmp.math = rand()%100;tmp.chinese = rand()%100;ret = list_insert(&list, &tmp);if(0 != ret)exit(1);}list_show(list);printf("\n\n");list_delete(&list);list_show(list);printf("\n\n");int id = 3;list_find(list, id);printf("\n\n");id = 4;struct score_st *ptr;ptr = list_find(list, id);if(NULL == ptr)printf("Can not find!");elseprintf("%d %s %d %d\n", ptr->id, ptr->name, ptr->math, ptr->chinese);list_distroy(list);list_show(list);return 0;
}

单链表创建以及头插、尾插(二)-(B站)史上最强最细腻的linux嵌入式C语言学习教程【李慧芹老师】相关推荐

  1. 单链表创建以及头插、尾插

    C语言高级进阶 链表是由一系列互相连接的节点组成的数据结构,这种数据结构非常有用,是实现队列和栈的基础. 学习内容 此章我们学习如何创建和使用单链表,如下代码是用来支持链表实现的结构体,Node结构体 ...

  2. C语言的单链表创建:头插法/尾插法

    文章目录 前言 链表头插法 链表尾插法 源码实现 前言 接下来一段时间,将对数据结构进行复习,总的来说数据结构自大学之后忘记得有点吓人,为了防止脑容量本就小得脑袋更小,必须得持续性得温故了. 链表数据 ...

  3. 单链表创建之--头插法创建带头结点的单链表

    单链表常见的创建方法有头插法和尾插法,这里记录头插法创建带头结点的单链表具体过程: 以C语言为例, 1)首先使用 typedef 关键字定义结点数据类型 typedef struct LNode{in ...

  4. 实现链表的插入——头插/尾插

    声明类: public class LinkList {LinkList next;int val;public LinkList(int val) {this.val = val;}public L ...

  5. 单链表的基本操作----------头插法/尾插法建立链表

    头插法 步骤: 1.在内存中找开辟一个空间,作为链表的头节点,将头结点滞空. 具体代码: L = (LinkList)malloc(sizeof(ND)); L -> next = NULL; ...

  6. 记录-链表头插尾插区别

    链表作为数据结构中比较重要的一种,具有操作效率高.内存利用率高.结构简单.使用方便等特点,今天我们一起交流一下单向线性表的头插法和尾插法的区别及优缺点 线性表因为每个元素都包含一个指向下一元素的指针, ...

  7. 链表的头插法和尾插法——头插尾插交替插入

    private static ListNode dummy = new ListNode(0);//头插法public static void headInsert(ListNode node){if ...

  8. 侃侃算法EP2·链表的头插尾插

    1. 前言 这个板块旨在记录一些日常中或是面试中会问到的算法和数据结构相关的内容,更多是给自己总结和需要的人分享.在内容部分可能由于我的阅历和实战经历不足,会有忽视或是写错的点,还望轻喷. 2. 内容 ...

  9. 二十万字带你入门C语言-史上最强C语言教程(汇总篇)

    一.前言 至此,史上最强C语言教程系列已经全部完成,今天是给大家来做一个汇总,笔者目前已经完成了C语言阶段的学习,一直以来感谢大家的陪伴与支持,笔者后续还会继续更新C++.数据结构.Linux.Mys ...

  10. 线性表基本操作,单链表的建立(头插法,尾插法)、插入、删除、遍历操作的实现(c++ 数据结构 实验二)

    大学数据结构课程的实验题目,掌握线性表的链接存储结构,用c++语言描述 一.实验要求 1.分别用头插法和尾插法建立一个含有若干结点的单链表 2.对已建立的单链表进行插入.删除.遍历输出等操作 二.代码 ...

最新文章

  1. R语言使用magick包的image_write函数将已有图像以任何指定的格式导出保存到磁盘上(例如将原文将从png转化为jpeg)
  2. php 函数:func_get_args()、func_get_arg()与func_num_args()
  3. web开发的java语言步骤_java web开发入门一(servlet和jsp)基于eclispe
  4. MS SQL数据库日志压缩方法[转]
  5. 快速了解Bagging算法
  6. linux修改进程优先级
  7. java static方法
  8. sql server计算日期到当前日期天数_Excel如何统计连续停机天数问题
  9. 使用ExchangeRate-API查询免费可用的汇率数据
  10. LaTex在Linux下编写高质量的文档
  11. ASP.NET中Button控件的CommandName和CommandArgument属性用法
  12. 自组织的组织力量,数字化趋势之一
  13. CentOS7部署WeADMIN监控主机交换机和URL(无坑版)
  14. Smartbi大数据在金融业的应用案例
  15. 第三章直接耦合多级放大电路
  16. Hbuilder 历次版本更新记录
  17. Android-skin-support 换肤原理全面解析
  18. 迅雷下载器-FDM,看2019新年大电影
  19. Samba文件服务器
  20. Ehome/ISUP协议海康设备的主动注册管理

热门文章

  1. 摄像头各参数的意义_详解:监控摄像头参数介绍说明 | 58监控网
  2. 计算机上u盘打不开,u盘打不开怎么办,插在电脑上有显示,但是打不开?
  3. 新版2002觅知blibli专用可对接JSON解析弹幕播放器-所有后台功能一键管理-更新22-4-29详解
  4. 不小心将项目的 iml文件删除了怎么办
  5. VMware ESXi 7.0 U2 SLIC Unlocker USB 网卡驱动集成镜像
  6. python 查询oracle数据库返回具体字段名
  7. linux安装qt4支持包,CentOS安装QT4遇到的问题
  8. matlab实现macd策略,经典MACD交易策略
  9. Frank and Hall
  10. Java实现批量发送邮件