C语言高级进阶

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

学习内容

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

学习产出

list.h

#ifndef __LIST_H__
#define __LIST_H__typedef int datatype;typedef struct node_st
{datatype data;struct node_st *next;
}list;list *list_create();int list_insert_at(list *, int i, datatype *);int list_order_insert(list *, datatype *);int list_delete_at(list *, int i, datatype *);int list_delete(list *, datatype *);int list_isempty(list *);void list_display(list *);void list_destroy(list *);#endif

list.c

#include <stdio.h>
#include <stdlib.h>
#include "list.h"list *list_create()
{list * me;me = malloc(sizeof(*me));if(NULL == me)return NULL;me->next = NULL;return me;
}int list_insert_at(list *me, int i, datatype *data)
{int j = 0;list *node = me, *newnode;if(i<0){return -1;}while(j<i && NULL != node){node = node->next;j++;}if(node){newnode = malloc(sizeof(*newnode));if(NULL == newnode)return -2;newnode->data = *data;newnode->next = NULL;newnode->next = node->next;node->next = newnode;return 0;}elsereturn -3;
}int list_order_insert(list *me, datatype *data)
{list *p = me, *q;while(p->next && p->next->data < *data){p = p->next;}q = malloc(sizeof(*q));if(NULL == q)return -1;q->data = *data;q->next = p->next;p->next = q;return 0;}int list_delete_at(list *me, int i, datatype *data)
{int j = 0;list *p =me, *q;*data = 0;if(i<0)return -1;while(j < i && p){p = p->next;j++;}if(p){q = p->next;p->next = q->next;*data = q->data;free(q);q = NULL;return 0;}elsereturn -2;return 0;}int list_delete(list *me, datatype *data)
{list *p = me, *q;while(p->next && p->next->data != *data)p = p->next;if((NULL == p->next))return -1;else{q =p->next;p->next = q->next;free(q);q = NULL;}return 0;
}int list_isempty(list *me)
{if(NULL == me->next)return 0;return 1;
}void list_display(list *me)
{list *node = me->next;if(0 == list_isempty(me))return;while(NULL != node){printf("%d \t", node->data);node = node->next;}printf("\n");return ;
}void list_destroy(list *me)
{list * node, *next;for(node = me->next; NULL != node; node = next){next = node->next;free(node);}free(me);return ;
}

main.c中进行测试:

#include <stdio.h>
#include <stdlib.h>#include "list.h"int main()
{list *l;int i;datatype arr[] = {11, 9, 22, 33, 56, 44};l = list_create();if(NULL == l){exit(1);}//顺序插入for(i = 0; i < sizeof(arr)/sizeof(*arr); i++){if(list_order_insert(l, &arr[i]))exit(1);}list_display(l);printf("********************************************************************\n");//按值删除节点int value1 = 22;list_delete(l, &value1);list_display(l);printf("********************************************************************\n");//按位置删除节点int j = 3, err;datatype value2;err = list_delete_at(l, j, &value2);if(err)exit(1);list_display(l);printf("********************************************************************\n");printf("delete value:%d\n", value2);list_destroy(l);}

单链表创建以及头插、尾插(一)-(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++语言描述 一.实验要求 1.分别用头插法和尾插法建立一个含有若干结点的单链表 2.对已建立的单链表进行插入.删除.遍历输出等操作 二.代码 ...

  10. 不带头结点的C语言单链表操作,头插法及尾插法

    接上篇带头结点的单链表操作,不带头节点真的比带头结点的麻烦好多,主要是我自己指针指的有点晕,搞了这几天的不带头结点的单链表,算是弄清楚指针的玩法了..老样子上代码. # include "s ...

最新文章

  1. “5G杀手级应用”Cloud VR 华为如何打响5G第一枪
  2. 初识Tcl(三):Tcl 变量及运算符
  3. Windows 下 Nginx + PHP5 的安装与配置
  4. js 从一个函数中传递值到另一个函数
  5. 读spring源码(一)-ClassPathXmlApplicationContext-初始化
  6. [渝粤教育] 盐城工学院 水处理微生物学 参考 资料
  7. Linux进程通信之mmap
  8. mysql表空间增长过快_Oracle表空间增长异常解决又一例
  9. pyspark编写UDF函数
  10. TP-link与电力线通信(智能电网)
  11. laypage分页java例子_laypage分页控件使用实例详解
  12. 单片机.C51基于LCD1602光强检测仪.光敏电阻.ADC0804
  13. jquery.ajaxSetup()函数详解
  14. 警惕新型钓鱼邮件诈骗~伪装的“再次发送”邮件
  15. 杭电Oj刷题(2017)
  16. 你知道要去学人工智能,但你却无从入手,对吗?
  17. python写通讯录_Python实现命令行通讯录实例教程
  18. JavaWeb 宠物领养管理系统实现(源码分享)
  19. ffmpeg推流实现实时播放监控画面(rtsp to rtmp)
  20. telnet服务端c 语言源码,Telnet服务端易语言源码

热门文章

  1. 单树莓派/双树莓派+USRP+srsLTE分布式搭建4G LTE微基站
  2. Apollo公开课六:规划
  3. 查找算法 binary_serach
  4. Mac下移动硬盘的使用
  5. web服务器共享文件夹,局域网web共享文件夹的方法
  6. HTML合并表格(单元格)
  7. 前端合并单元格(行合并、列合并)
  8. nali: 给dig,traceroute等命令的输出的ip附加上地理信息
  9. 超链接去掉下划线代码
  10. 试题 基础练习 特殊回文数(123321是一个非常特殊的数,它从左边读和从右边读是一样的。   输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。)