之前用C写链表的时候,结点使用结构体封装的,操作起来总是感觉很麻烦。C++中使用类来封装结点,感觉操作起来方便多了,内存回收也感觉很清楚。

最近,做Gps数据分析时,别人要求加一个树形控件。

Gps数据是存储在Excel中的,不知道什么原因,采用OLE方式操作数据较多的Excel时,数据读取变得很缓慢,如果加一个树形控件,总不能点一下就从新读取Excel表格一次吧。所以这里用链表暂时解决了这个问题,一个Excel表格的数据看做链表的一个节点,树形控件显示Excel的标题,当点击树形控件下已经被读取过得Excel时,程序不再重新读取Excel的数据,只需要去链表中查询对应的结点就好了。

下面是实现链表的两个类(比较简单的一个封装):

GpsNode 和GpsList的定义:

class GpsNode//存储一组GPS数据的节点
{
public:
GpsNode();
GpsNode(int TotalNum);
GpsNode(int TotalNum, int label = );//label=0作为头结点
~GpsNode(); void SetSpace(int TotalNum);
GpsNode *next;
public:
double Q;//计算DQ的均值
double *F;//F值
double *DQn;
double *X;
double*Y;
double*Z;
int TotalNum;//数据量
double MaxValue;//数据中最大的值,用于画图
int Label;//在链表中的位置
}; class GpsList //Gps数据链表
{
public:
GpsList();
~GpsList();
GpsNode *Head;
GpsNode *p;
void AddTail(int TotalNum, GpsNode *N); GpsNode * ReadNode(int Label);
void DeleteNode(int Label);
void ClearNode();
};

两个类的实现:

GpsNode::GpsNode()
{
F = NULL;
DQn = NULL;
X = NULL;
Y = NULL;
Z = NULL;
}
GpsNode::GpsNode(int TotalNum)
{
F = new double[TotalNum];
DQn = new double[TotalNum];
X = new double[TotalNum];
Y = new double[TotalNum];
Z = new double[TotalNum];
} GpsNode::GpsNode(int TotalNum, int label)
{
if (label == )
{
F = NULL;
DQn = NULL;
X = NULL;
Y = NULL;
Z = NULL;
}
} GpsNode::~GpsNode()
{
if (F != NULL)
{
delete[] F;
delete[] DQn;
delete[] X;
delete[] Y;
delete[] Z;
}
}
void GpsNode::SetSpace(int TotalNum)
{
F = new double[TotalNum];
DQn = new double[TotalNum];
X = new double[TotalNum];
Y = new double[TotalNum];
Z = new double[TotalNum];
}
GpsList::GpsList()
{
GpsNode *N;
N = new GpsNode;
Head = N;
p = Head;
}
GpsList::~GpsList()
{
ClearNode();
}
void GpsList::AddTail(int TotalNum, GpsNode *N)
{
p->next = N;
N->next = NULL;
p = N;
}
GpsNode * GpsList::ReadNode(int Label)
{
GpsNode *Flag = NULL;
GpsNode *Result = NULL;
Flag = Head->next;
while (Flag != NULL)
{
if (Flag->Label == Label)
{
Result = Flag;
}
Flag = Flag->next;
}
return Result;
}
void GpsList::DeleteNode(int Label)
{
GpsNode *Flag = NULL;
GpsNode *Next = NULL;
while (Flag != NULL)
{ if (Flag->next->Label == Label)
{
GpsNode *Next = NULL;
Next = Flag->next;
Flag->next = Next->next;
delete Next;
}
Flag = Flag->next;
}
} void GpsList::ClearNode()
{
GpsNode *Flag = NULL;
GpsNode *Next = NULL;
Flag = Head->next;
while (Flag != NULL)
{
Next = Flag->next;
delete Flag;
Flag = Next;
}
}

Node中封装的X,Y,Z,Q...Gps的一些数据,每组数据大小不一样,所以每个结点的大小会不同。

C++链表的更多相关文章

  1. Redis链表实现

    链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元素都是比较长的字符串时, Redis 就会使用链表作为列表键的底层 ...

  2. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

  3. 排序算法----基数排序(RadixSort(L))单链表智能版本

    转载http://blog.csdn.net/Shayabean_/article/details/44885917博客 先说说基数排序的思想: 基数排序是非比较型的排序算法,其原理是将整数按位数切割 ...

  4. 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结

    防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数 ...

  5. 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法

    有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...

  6. C语言之链表list

    #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h& ...

  7. 单链表的C++实现(采用模板类)

    采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作.  链表结构定义 定义单链表 ...

  8. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  9. 用JavaScript来实现链表LinkedList

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文地址. 写在前面 好多做web开发的朋友,在学习数据结构和算法时可能比较讨厌C和C++,上学的时候写过的也忘得差不多了,更别提没写过的了.但幸运 ...

  10. 数据结构:队列 链表,顺序表和循环顺序表实现(python版)

    链表实现队列: 尾部 添加数据,效率为0(1) 头部 元素的删除和查看,效率也为0(1) 顺序表实现队列: 头部 添加数据,效率为0(n) 尾部 元素的删除和查看,效率也为0(1) 循环顺序表实现队列 ...

随机推荐

  1. tomcat 应用部署的几点注意

    将应用部署到Tomcat根目录的目的是可以通过"http://[ip]:[port]"直接访问应用,而不是使用"http://[ip]:[port]/[appName]& ...

  2. mysql安装及配置服务

    第一次安装mysql 1.本地环境:windows 7 -64,mysql版本5.5.28(mysql-5.5.28-winx64.msi) 2.双击mysql-5.5.28-winx64.msi,进 ...

  3. Nagios学习实践系列——配置研究[监控当前服务器]

    其实上篇Nagios学习实践系列——基本安装篇只是安装了Nagios基本组件,虽然能够打开主页,但是如果不配置相关配置文件文件,那么左边菜单很多页面都打不开,相当于只是一个空壳子.接下来,我们来学习研 ...

  4. Reporting Service 服务启动时报错The service did not respond to the start or control request in a timely fashion

    案例环境: 启动一台数据库服务器(Windows Server 2003)的Reporting Service(SQL Server 2008 R2)服务时,出现如下错误信息: System.Inva ...

  5. web.xml is missing and <failOnMissingWebXml> is set to true 错误解决办法

    对web项目的解决方案: 右击项目——>Java EE Tools——>Generate Deployment Descriptor Stub. 然后系统会在src/main/webapp ...

  6. Python写地铁的到站的原理简易版

    Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...

  7. openstack云5天资料

    在网上看到有个人的博客,写了个openstack云5天学习资料.对于英文不怎么好的童鞋来说,感觉还可以.可以对openstack有所了解和认识,对后续openstack更加深入的学习有很大的帮组.   ...

  8. 编译安装zabbix 3.0及分开部署配置详解

    实验系统:CentOS 6.6_x86_64 实验前提:提前准备好编译环境,防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP及角色分配如拓扑 下载地址:试验中用到mariadb软件的下 ...

  9. 【Windows编程】系列第八篇:通用对话框

    上一篇我们学习了菜单的基本编程,本篇来了解一下通用对话框的使用.Windows系统之所以是目前最流行的桌面系统,也是因为Windows有一套标准化,统一友好的交互界面,比如菜单.工具栏.状态栏以及各个 ...

  10. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...