C语言嵌入式数据结构之链表
链表在C语言中对于我来说,一直是个头疼的问题,现在已经工作了,这些东西得要搞懂。先从基础开始弄起吧。
链表
单向链表
所谓链表就是每个结点除了值以外附带一个链接的表,一般这个链接指向下一个结点,从而形成了一个有序队列。单向链表是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。链表是使用指针进行构造的列表,并且是由一个个结点组装起来的,因此又称为结点列表。其中每个结点都有指针成员变量指向链表的下一结点,head指针指向的第一个结点称为表头,而终止于最后一个指向null的指针。
结点的数据结构:
struct Node
{int data;struct Node* next;
};
单向链表的基本操作
1、创建一个链表(创建一个表头表示整个链表)
struct Node* createList() {struct Node* headNode =(struct Node*)malloc (sizeof(struct Node));//headNode成为了结构体变量//headNode->data =1;//变量使用前必须初始化headNode->next =NULL;return headNode ;
}
2、创建一个结点
//创建结点
struct Node* createNode(int data){struct Node* newNode =(struct Node*)malloc (sizeof(struct Node));newNode-<data =data;newNode->next =NULL;return newNode;
}
3、插入结点
void insertNodeByHead(struct Node* headNode,int data)
{//创建插入的结点struct Node* newNode =createNode(data);newNode ->next =headNode-<next;headNode->next =newNode;
}
4、删除结点
void deleteNodeByAppoin (struct Node* headNode,int posData) {struct Node* posNode =headNode->next;struct Node* posNodeFront =headNode;if(posNode ==NULL) {printf("无法删除链表为空\n");}else {while (posNode->data !=posData) {posNodeFront =posNode;posNode =posNodeFront->next;if(posNode ==NULL) {printf("没有找到相关的信息,无法删除\n");break;}}posNodeFront ->next =posNode->next;free(posNode);}
}
5、打印遍历链表
void printList(struct Node* headNode)
{struct Node* pMove =headNode->next;while (pMove) {printf("%d\t",pMove->data);pMove =pMove->next;}printf("\n");
}
以下是动态链表整体的代码(可运行)
//动态链表#include <stdio.h>
#include <stdlib.h>struct Node{int data; //数据域struct Node* next; //指针域
};struct Node* createList() {struct Node* headNode =(struct Node*)malloc(sizeof(struct Node));//headNode成为了结构体变量//变量使用前必须被初始化//headNode->data = 1;headNode->next =NULL;return headNode;
}
//创建结点
struct Node* createNode(int data) {struct Node* newNode =(struct Node*)malloc (sizeof(struct Node));newNode->data =data;newNode->next =NULL;return newNode;}void printList(struct Node* headNode)
{struct Node* pMove =headNode->next;while (pMove) {printf("%d\t",pMove->data);pMove =pMove->next;}printf("\n");}void insertNodeByHead(struct Node* headNode,int data){//创建插入的结点struct Node* newNode = createNode(data);newNode->next =headNode->next;headNode->next =newNode;
}void deleteNodeByAppoin (struct Node* headNode,int posData) {struct Node* posNode =headNode->next;struct Node* posNodeFront =headNode;if(posNode ==NULL) {printf("无法删除链表为空\n");}else {while (posNode->data !=posData) {posNodeFront =posNode;posNode =posNodeFront->next;if(posNode ==NULL) {printf("没有找到相关的信息,无法删除\n");break;}}posNodeFront ->next =posNode->next;free(posNode);}
}
int main(){struct Node*list =createList();insertNodeByHead(list,1);insertNodeByHead(list,2);insertNodeByHead(list,3);printList(list);deleteNodeByAppoin(list,1);printList(list);system ("pause");return 0;
}
C语言嵌入式数据结构之链表相关推荐
- Scratch 与C语言实现数据结构静态链表的建立及操作
Scratch 实现数据结构静态链表的建立及操作 scratch操作 Scratch 实现数据结构静态链表的建立及操作 数据结构 初始化静态链表 添加数据代码 删除数据 回收空闲节点操作代码 计算静态 ...
- C语言(数据结构) - 链表的基本操作
1,为什么要用到链表 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性.但数组也同样存在一些弊病.如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中 ...
- c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出
C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...
- c语言仓库管理系统链表,仓库管理系统 C语言 C++ 数据结构 链表 课程设计
仓库管理系统 C语言 C++ 数据结构 链表 课程设计 #include #include #include #include #define MAX 64 typedef struct node{ ...
- c语言工程合并报告,C语言《数据结构》实验报告】链表的合并
<C语言<数据结构>实验报告]链表的合并>由会员分享,可在线阅读,更多相关<C语言<数据结构>实验报告]链表的合并(8页珍藏版)>请在人人文库网上搜索. ...
- 数据结构之链表(java语言实现)
链表的底层储存结构: 相对于数组这一需要连续.足够大空间的数据结构,链表只需要利用"指针"将一组零碎的空间(在链表中称之为节点)串联起来,这样就可以避免在创建数组时一次性申请过大的 ...
- c语言实现链表的逆序输出,C语言数据结构实现链表逆序并输出
C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...
- c语言仓库管理系统链表,仓库管理系统 C语言 C 数据结构 链表 课程设计.doc
仓库管理系统 C语言 C 数据结构 链表 课程设计 #include #include #include #include #define MAX 64 typedef struct node{ /* ...
- 数据结构——十字链表(C语言实现)
十字链表是将邻接表和逆邻接表结合在一起的一种有向图的数据结构 十字链表的节点结构体表示的是一个节点到另一个节点的边,并且此由指出节点(from)和指入节点(to)共同使用,因此大大节省了内存. 先直观 ...
- 数据结构-单链表基本操作(C语言实现)
参考书:王道考研数据结构 (此贴为博主学习408的笔记,因博主也是学习者,个人总结如有错误欢迎指正.如有侵权请告知,马上删除致歉) 单链表定义 单链表是线性表的链式存储,通过一组任意的存储单元来存 ...
最新文章
- SASS的一些使用体会(安装-配置-开启firefox的调试)
- IOS 多线程的一些总结
- C++ Opengl 绘制字体源码
- SLAM: 单目视觉SLAM的方案分类《机器人手册》
- C++之virtual 方法
- IAR切BANK--程序中的使用
- php无刷新跳转,用#号实现web页面的无刷新跳转
- Python精确指南——第四章-部署和技巧
- 图论算法 最短路程_图论与图学习(二):图算法
- 二叉树的存储结构入门(java描述)
- 序列标注模型结果评估模块seqeval学习使用
- C语言使用SQLite3数据库
- android个人日记本论文,手机app移动开发论文-个人心情日记本的设计实现 毕设论文.doc...
- python uci_UCI机器学习数据库的Python API介绍
- 【K8S】Submariner实现跨集群通信
- [系统运维]进程的守护神 - Supervisor
- 论文阅读:(arXiv 2021)Beyond Periodicity: Towards a Unifying Framework for Activations in Coordinate-MLP
- android迷宫图像生成,Android - 绘制一个迷宫,以平滑的角色移动的画布
- 婚礼策划|婚礼相册|情人节表白快闪动态PPT模板
- 《Pro SQL Server Internals, 2nd edition》 作者:Dmitri KorotkevitchP55-58 P62-65 P68-69
热门文章
- number1(python)
- 批处理打开/关闭休眠
- kubernetes日志架构
- 计算机黑屏死机,电脑死机后开机黑屏怎么办
- 真正的免费云时代来临,免费1T全能空间提供1T免费全能空间申请,
- 解决 Elasticsearch 查询时 Fielddata is disabled on text fields by default 错误
- 3月20 Bundle Adjustment光束平差法概述
- [codeforces 1293A] ConneR and the A.R.C. Markland-N 不超时的二分/无限长数组map+桶排序
- 爬虫返回乱码以及解决办法以及锟斤拷、ISO-8859-1转码、#、#x转码、unicode转码,gbk转码,ascii转码
- php的seeder是什么,Laravel学习笔记之Seeder填充数据小技巧