C++数据结构day01-链式存储
大家好,我是阿林。我今天分享的c++中的链式存储。
对于数据结构上来说,新手都是在定义结构体直接写进链式存储中,但对于企业项目我们要做到定义的结构体和数据结构的链式存储分离才算好。
现在我们来学习怎么去分离结构体和链式存储
这个的主要思想是我们将结构体定义到main.c中通过使用(LinkListNode*)(&t1)强转去调用函数,返回的值再利用强转(Teacher*)LinkList_Get(list, i),得到值。这样就实现了分离。比较容易错误的一点我们定义结构体并不是传统意义上的结构体所以
typedef struct Teacher
{
LinkListNode node;
int age;
char name[64];
}Teacher;
中 LinkListNode node一定要放到最前面。
下面我们看看代码
linklistc文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "linklist.h"typedef struct Teacher
{LinkListNode node;int age;char name[64];}Teacher;void main()
{int len = 0, ret = 0;int i = 0;LinkList* list = NULL;Teacher t1, t2, t3, t4, t5;t1.age = 31;t2.age = 32;t3.age = 33;t4.age = 34;t5.age = 35;list = LinkList_Create();if (list == NULL){return;}len = LinkList_Length(list);printf("len: %d\n", len);//链表的算法和具体的业务结点的分离。ret = LinkList_Insert(list, (LinkListNode*)(&t1), 0);ret = LinkList_Insert(list, (LinkListNode*)(&t2), 0);ret = LinkList_Insert(list, (LinkListNode*)(&t3), 0);ret = LinkList_Insert(list, (LinkListNode*)(&t4), 0);ret = LinkList_Insert(list, (LinkListNode*)(&t5), 0);for (i = 0; i < LinkList_Length(list); i++){Teacher* tmp = (Teacher*)LinkList_Get(list, i);if (tmp == NULL){return;}printf("tmp->age:%d", tmp->age);}//删除链表while (LinkList_Length(list) > 0){LinkList_Delete(list, 0);}LinkList_Destroy(list);//LinkList* LinkList_Create();//void LinkList_Destroy(LinkList * list);//void LinkList_Clear(LinkList * list);//int LinkList_Length(LinkList * list);//int LinkList_Insert(LinkList * list, LinkListNode * node, int pos);//LinkListNode* LinkList_Get(LinkList * list, int pos);//LinkListNode* LinkList_Delete(LinkList * list, int pos);system("pause");return;
}
linklist.h文件
#pragma once#ifndef MY_LINKLIST_H
#define MY_LINKLIST_Htypedef void LinkList;typedef struct _tag_LinkListNode
{struct _tag_LinkListNode* next;
}LinkListNode;LinkListNode node1;LinkList* LinkList_Create();void LinkList_Destroy(LinkList* list);void LinkList_Clear(LinkList* list);int LinkList_Length(LinkList* list);int LinkList_Insert(LinkList* list,LinkListNode* node,int pos);LinkListNode* LinkList_Get(LinkList* list,int pos);LinkListNode* LinkList_Delete(LinkList* list, int pos);#endif //
main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "linklist.h"typedef struct Teacher
{LinkListNode node;int age;char name[64];}Teacher;void main()
{int len = 0, ret = 0;int i = 0;LinkList* list = NULL;Teacher t1, t2, t3, t4, t5;t1.age = 31;t2.age = 32;t3.age = 33;t4.age = 34;t5.age = 35;list = LinkList_Create();if (list == NULL){return;}len = LinkList_Length(list);printf("len: %d\n", len);//链表的算法和具体的业务结点的分离。ret = LinkList_Insert(list, (LinkListNode*)(&t1), 0);ret = LinkList_Insert(list, (LinkListNode*)(&t2), 0);ret = LinkList_Insert(list, (LinkListNode*)(&t3), 0);ret = LinkList_Insert(list, (LinkListNode*)(&t4), 0);ret = LinkList_Insert(list, (LinkListNode*)(&t5), 0);for (i = 0; i < LinkList_Length(list); i++){Teacher* tmp = (Teacher*)LinkList_Get(list, i);if (tmp == NULL){return;}printf("tmp->age:%d", tmp->age);}//删除链表while (LinkList_Length(list) > 0){LinkList_Delete(list, 0);}LinkList_Destroy(list);//LinkList* LinkList_Create();//void LinkList_Destroy(LinkList * list);//void LinkList_Clear(LinkList * list);//int LinkList_Length(LinkList * list);//int LinkList_Insert(LinkList * list, LinkListNode * node, int pos);//LinkListNode* LinkList_Get(LinkList * list, int pos);//LinkListNode* LinkList_Delete(LinkList * list, int pos);system("pause");return;
}
C++数据结构day01-链式存储相关推荐
- 【Java数据结构】链式存储的二叉树
链式存储的二叉树 二叉树数据结构 创建二叉树 二叉树的遍历 先序遍历 中序遍历 后序遍历 二叉树节点的查找 先序查找 中序查找 后序查找 删除二叉树的子树 二叉树示例完整代码 BinaryTree 类 ...
- 数据结构—链表-链式存储
头节点里面不放任何东西 头指针指向头节点 有些链表没有头节点 头指针直接指向首节点 头节点是为了方便插入和删除运算的实现 单链表的存储结构其实就是描述每一个节点是如何构成的 首先他数据域和数据类型是什 ...
- 数据结构和算法:(3)3.2线性表的链式存储结构
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素也就是说你这个可以放在A地点,这个可以放在E地点,A地点和E地点中间可以隔开一个C地点和D地点,这样是允许的),这组存储单元可以存在 ...
- 从零开始学数据结构和算法(二)线性表的链式存储结构
链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...
- 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...
还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...
- 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)
线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...
- 队列的链式存储结构及其实现_了解队列数据结构及其实现
队列的链式存储结构及其实现 A queue is a collection of items whereby its operations work in a FIFO - First In Firs ...
- 链式存储结构 php,【PHP 实现数据结构】链式队列
什么是链式队列 队列是一种"先进先出"的存储结构,是一种特殊的线性表,于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作. 通常队列可以分为顺序队 ...
- 数据结构之线性表-链式存储之单链表(一)
本人文笔较差,语文从来不及格,基础不好,写此类文章仅供自己学习,理解队列及其他知识,高手大神请略过.参考书籍 <数据结构与算法分析-Java语言描述> 1.1 单链表简介 线性表的最大的缺 ...
最新文章
- 那天的延长线在今天β
- ActiveReports报表控件教程之单元格合并
- 京东连续亏损十几年,为什么却发展越来越大?
- 适用于ELment-UI级联多选框,数据回填,根据子节点的值查找完整路径
- [bzoj 3226]校门外的区间
- centos使用vnc实现远程访问图形化界面
- elementUI中复选框checkbox的使用
- 每日算法系列【LeetCode 684】冗余连接
- 编译原理中:短语,直接短语,句柄
- ad13批量安装元件库_别人的altium designer常用元件库和封装库下载-非常全面初学者有福了...
- Docker容器-cgroups资源配置
- 在全志平台调试博通的wifi驱动(类似ap6212)【转】
- 百度AI开放平台文字之身份证识别的实现
- 计算机初始化,怎么初始化电脑 电脑要如何初始化教程
- 【毕业设计】单片机 火灾智能报警系统 - 嵌入式 物联网
- 用join实现交集,并集,差集,补集的效果
- spring boot 2.x 拦截器
- 电脑解锁后黑屏有鼠标_电脑开机黑屏只有鼠标怎么办
- 地方门户+html+模板,帝国CMS地方门户网站模板(含分类信息,WAP手机模板)
- ifc文件转换成obj和mtl文件