用c语言实现基本数据结构(链表)

数据结构 基本代码——线性表,链表实现 C语言 单链表功能的实现。 阅读详情

用c语言实现基本数据结构(链表)

感觉写链表比较考验对指针的理解。。。
下图可以方便对链表中指针进行理解

List* L; //新建链表指针,没有指向任何东西
L = (List *)malloc(sizeof(List)) //从堆中分配List大小的内存空间,赋给L,L就有了指向的空间。
*L //L指向的结构体,一般不用这种写法(主要是不方便)
L->data //L指向的结构体中的数据
L->next //L指向的结构体中的指针next,一个指针类型数据
//c语言的链表中,一个节点的意思就是一个结构体。

首先是单链表
结构体如下

typedef struct Linklist{
	int data;
	struct Linklist* next;
}List;

方法如下

void InitList(List *L); //初始化链表(建立头节点)
void CreateList(List *L);//创建链表,先输入待输入数据个数,再输入数据
List* FindNode(List *L, int n);//找到第n个节点(从1开始)
void InsertNode(List* L, int n, int data);//在第n个节点后插入节点
int ListLength(List* L);//返回链表长度
int DelNode(List *L, int n);//删除第n个节点
void PrintfList(List *L);//输出所有节点数据

完整代码如下

#include <stdio.h>
#include <stdlib.h>

typedef struct Linklist{
	int data;
	struct Linklist* next;
}List;

void InitList(List *L){
	L = (List *)malloc(sizeof(List));
	L->data = 0;
	L->next = NULL;
	if(L == NULL){
		printf("create list wrong!!!\n");
	}
}

void CreateList(List *L){
	List *tailpoint = L;
	int len = 0;	
	while(len <= 0){
		printf("over input data length!\n");
		scanf("%d", &len);
	}
	for(int i = 0; i < len; i++){
		List* node = (List *)malloc(sizeof(List));
		scanf("%d", &node->data);
		node->next = NULL;
		tailpoint->next = node;
		tailpoint = node;
	}
	printf("end input!\n");
}

List* FindNode(List *L, int n){
	List *p = L;
	for(int i = 0; i < n; i++){
		if(p == NULL){
			printf("list crossover!!!\n");
			return NULL;
		}
		p = p->next;
	}
	return p;
}

void InsertNode(List* L, int n, int data){
	List* p = FindNode(L, n);
	List* node = (List*)malloc(sizeof(List));
	node->data = data;
	node->next = p->next;
	p->next = node;
}

int ListLength(List* L){
	List *p = L;
	int len = 0;
	while(p->next != NULL){
		p = p->next;
		len++;
	}
	return len;
}


int DelNode(List *L, int n){
	List *pre = FindNode(L, n-1);
	if(pre->next == NULL){
		printf("list crossover\n");
		return 0;
	}
	List *p = pre->next;
	pre->next = p->next;
	free(p);
	return 1;
}

void PrintfList(List *L){
	List *p = L->next;
	while(p != NULL){
		printf("%d ", p->data);
		p = p->next;
	}
	printf("\n");
}

测试代码如下

#include"myList.h"
	
int main(){
	List *list;
	List *node;
	printf("-----------------a\n");
	InitList(list);
	printf("-----------------b\n");
	CreateList(list);
	PrintfList(list);
	printf("-----------------c\n");
	node = FindNode(list, 1);
	printf("%d\n", node->data);
	printf("-----------------d\n");
	InsertNode(list, 3, 89);
	PrintfList(list);
	printf("-----------------e\n");
	printf("%d\n", ListLength(list));
	printf("-----------------f\n");
	DelNode(list, 2);
	PrintfList(list);
	return 0;
}
Gartner《构建可扩展数据产品建设框架》心得 数据产品化:从概念到落地的实践指南 当前企业正从传统数据需求模式转向数据产品化新范式。本文系统阐述了数据产品的核心价值、定义分类和实施框架,指出成功关键是将数据包装为可复用、可扩展的产品。Gartner框架强调产品思维,提出4阶段12步实施路径,涵盖设计、工程、发布和监控全流程。文章特别提醒要避免7大常见误区,如简单重命名报表、忽视元数据治理等,建议采取MVP策略,90天内完成从价值验证到产品落地的闭环。实施中需平衡技术选型与业务需求,建立跨职能团队,并通过AARRR模型持续追踪产品价值。 阅读详情

相关推荐

保姆级教程:用Qlib和LightGBM从零搭建你的第一个AI量化选股策略(附完整代码)

本文提供了一份详细的教程,教你如何使用Qlib和LightGBM从零搭建AI量化选股策略。教程涵盖了环境配置、数据获取、特征工程、模型训练和策略回测等关键步骤,并附有完整代码和常见问题解决方案,适合量化投资初学者快速上手。

weixin_29191081的博客 444

数据结构--链表

文章目录单链表链表插入头插入尾插法链表删除链表遍历双链表双循环链表 单链表 #include<stdio.h> #include<stdlib.h> // 定义结构体 typedef struct link{ int elem; // 代表数据域 struct link *next; // 代表指针域 }link; // 初始化链表 link *creatlink(){ link *p = (link*)malloc(sizeof(link)); // 声明一

weixin_51552144的博客 911

YOLOv8模型部署与测试:保姆级教程(含Ultralytics配置避坑指南)

本文提供了一份详尽的YOLOv8模型部署与测试指南,涵盖环境配置、模型加载、参数优化、批量处理及API服务封装等关键步骤。重点分享了Ultralytics框架在实际部署中的常见问题与解决方案,帮助开发者高效完成从训练到生产的过渡,确保模型在真实场景中稳定运行。

weixin_29038155的博客 293

单链表的基本操作(C语言+图解分析)

纯C语言,代码均可直接运行,读者可自行调试。

Curz酥的博客 2087

kettle多表数据迁移

点击 文件——新建——作业,在左侧的 核心对象 标签下选择 通用,双击添加一个 start ,一个 转换 ,一个 作业 和一个 成功 到右侧的作业面板,这些作业项都可以改名字。点击文件—新建—转换,在左侧的 核心对象 标签下选择 输入 下的 表输入,双击添加到右侧的转换面板,再选择 作业 下的 复制记录到结果 ,双击添加到右侧的转换面板。新建转换,在左侧的 核心对象 标签下选择 作业 下的 从结果获取记录,双击添加到右侧的转换面板,再选择 作业 下的 设置变量 ,双击添加到右侧的转换面板。

u014061745的博客 1340

无人机避障——4DMmvRadar三维点云坐标转换到无人机坐标系(三)

无人机避障——4DMmvRadar三维点云坐标转换到无人机坐标系(三)

weixin_45390670的博客 1869

C语言数据结构之动态数组

List.h #include typedef struct list{ int length; int * data; } List; //初始化动态数组 void InitList(List * list); //销毁动态数组 void DestroyList(List * list); //查看列表是否为空 bool ListIsEmpty(const List

bool的博客 2852

OpenGL绘制简单场景,实现旋转缩放平移和灯光效果

本项目实现了用OpenGL绘制一个简单场景,包含正方体、球体和网格,实现了物体的旋转、缩放、平移和灯光效果。附有项目完整代码,有详细注释。适合初学者熟悉opengl使用。

张竞成的博客 1万+

C数据结构_链表

1.定义链表 //无头单向非循环链表 typedef struct SListNode { int data; struct SListNode*next; }SListNode; typedef struct SList { SListNode*head; }SList; 2.链表基础功能的实现 //初始化 void Init(SList*p); //销毁 void Dest...

hello呀! 672

<Verilog实现除法器> Verilog实现牛顿-拉夫逊(Newton-Raphson)除法器

阿斯顿阿斯顿啊啊是打发士大夫

IC跳跳鱼的博客 3585

画个板子玩一玩STM32F030F4P6,也许是最便宜的32bit MCU

前言,什么是STM32F030F4P6 STM32目前最便宜的芯片之一应该就是这一块,STM32F030F4P6,这一个芯片没有USB,但是其他都有,引脚少,价格低廉,如果找不到原厂,可以买替代的国产芯片,性能也一样。 不管怎么样也是Cortex-M0,比8bit和16bit的性能都强,总的来说就是低价,引脚少,体积小的同时,还容易开发,有很多模拟输入可玩,还有SPI,硬件I2C等等 所以,这一款MCU真的是从理论来说又便宜又好用,非常适合把玩。 画个板,最小系统 STM32F030其..

arenascat的博客 2万+

数据结构中的问题与typedef

1. typedef的作用typedef的作用就是对已有的对象(包括但不限于基本数据类型、自定义的数据类型和对象等)起一个别名格式为typedef 原对象名 别名2. 严蔚敏《数据结构》中的结构体首先严蔚敏的《数据结构》采用的时类c代码,不光是c或者c++,比如传引用时c++中的,c中并没有。2.1 c中定义结构体的原本方式c中定义结构体的原本方式应该是(这里用定义单链表为例):struct Lin

liao20081228的博客 3011

流量PID控制(开度前馈量计算+辅助PID)

PLC通过伯努利方程近似计算水箱流量(FC)-优快云博客文章浏览阅读1.6k次。本文介绍了如何使用PLC通过伯努利方程近似计算水箱中的液体流量,主要涉及流量计算、模型验证、梯形图编程及STL代码实现。适合自动化领域的学习者参考。单容双容水箱建模(simulink仿真+PLC代码)_水箱系统的建模方法-优快云博客文章浏览阅读2k次。该博客介绍了如何使用伯努利方程建立单容和双容水箱模型,详细阐述了从理论建模到PLC编程的实现过程。

RXXW_Dor的博客 845

数据结构 C语言 实现单链表的各种基本操作

大概写了150多行,都是很基础的操作。需要的自取。 (书籍为数据结构教程(第五版)李春葆) 实验内容 实验三 链表基本操作的实现 【实验目的】 1.掌握线性表的链式存储表示。 2.掌握单链表的基本操作,包括创建、查找、插入和删除等算法。 【实验内容】 编写程序linklist.cpp,实现单链表的各种基本运算(假设单链表的元素类型为char),并在此基础上设计主程序main.cpp,完成如下功能: 1.初始化单链表; 2.依次采用尾插法插入元素a,b,c,d,e; 3.输出单链表; 4.判断单链表的长度;

WindsProgrammer的博客 5807

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

数据结构—链表基本操作的实现(C语言)

前言 本文介绍线性表链式存储时基本操作的实现,包括链表的结构定义、初始化、创建、插入、删除、销毁、显示、判空、求长度、取元素,以及链表的合并。 主要参考:严蔚敏“数据结构及应用算法教程”教材 代码如下 #include<stdio.h> #include<stdlib.h> #define TRUE 1 //代码中出现True相当于出现1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #de

m0_62307289的博客 2643

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【数据结构】C语言实现单链表的基本操作

【数据结构】第二章——线性表(6) 详细介绍了通过C语言实现单链表的基本操作……

蒙奇D索大的博客 2664

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数据结构 单链表基本操作实现 C语言

个人复习过程中的回顾,有问题请与我交流。(纯c语言版,未用到c++的引用) /*单链表(含头结点)*/ #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; //#define ElemType int typedef int ElemType; typedef struct LNode{ ElemType data; struct LNo...

cdwzl的博客 1323

数据结构——链表的基本操作(C语言实现)

#include "stdio.h" #include "malloc.h" //用于malloc、realloc函数 typedef int Type; typedef struct lnode { Type data; //数据域 struct lnode* next;//指针域 }Lnode, * LinkList;//Lnode为结点类型 LinkList为指向Lnode型的指针变量 //函数说明 void CreateList_1(LinkList L, int n); //逆序建表函数

weixin_45731724的博客 461

【数据结构】C语言实现单链表基本操作

#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int ElemType; //单链表的存储结构 typedef struct LNode { ElemType data; struct LNode *next; //next指向自身类型struct LNode *的指

weixin_43716338的博客 3672

c语言数据结构——链表的实现及其基本操作

顺序表的问题及思考中间/头部的插入删除,时间复杂度为O(N)增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。思考:如何解决以上问题呢?下面我们给出了链表的结构,让我们来看看吧。

希望自己从编程小白变成大佬 4859

清华大学C语言版数据结构——用链表实现栈基本操作

清华大学C语言版数据结构——栈的实现和基本操作 前言 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ...

imisu_so的博客 861

详解数据结构-栈的基本操作以及栈数组、栈链表的实现(C语言代码实现)

在开始前,请牢记这句话:栈是一种先进后出的数据结构。栈(stack)是限定仅在表的一端进行操作的数据结构,请联系我们前文所学的,设想一个单链表我们只能够对其链表的表尾结点进行操作,而操作也只能够进行插入一个新的结点与删除最末尾的这个结点两个操作,而这样强限制性的‘链表’,就是我们所说的栈。让我们重新理顺一下定义:💡栈分为数组栈和链表栈,其区别是数组栈使用数组进行功能的模拟,实现较为快速和便利,而链表栈使用链表的思路去设计,实现较为麻烦,但是其稳定不易出错;

Dola的博客 1300

数据结构严蔚敏 线性表基本操作C语言实现(单链表)

【数据结构(严蔚敏)】 线性表基本操作C语言实现(单链表) vs2017 算法2.8–算法2.11 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;iostream&gt; using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ER...

欢乐佛的博客 2359

数据结构(C语言实现)——链表的介绍及基本操作的实现(单链表+带头双向循环链表)

本篇文章详细的介绍了单链表和带头双向循环链表的基本操作,并且总结了顺序表和链表的区别,干货满满,看完本文链表这一块就是拿捏了。

_Fiora的博客 1019

数据结构双向链表及基本操作实现(C语言实现)

双向链表基本操作的实现 双向链表的特点:双向链表相对于单向链表其优点在于其可以同时查看某个节点的前驱节点和其后继节点,当然因为一个节点使用了两个指针来记录前后节点的位置,其每个节点占用的内存空间自然更大 其实现的基本操作代码如下: #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef int ElementType; typedef struct LNode { ElementT

qq_42169456的博客 2686

数据结构C语言版--单链表的基本功能实现

/* * 构造一个链式存储的线性表(当输入9999时,结束构造过程),然后输出该线性表 * 并统计该线性链表的长度 。 *注:new和delete是C++的运算符 malloc和free是C++/C的标准库函数 */ #include<stdio.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 //单链表的存储

T_P_F的博客 2787
上一篇: 用c语言实现基本数据结构(栈)
下一篇: 用c语言实现基本数据结构(二叉树)
learnanddeath
博客等级 码龄9年 16粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值