C++链表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++链表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2476字,纯文字阅读大概需要4分钟。
内容图文
之前用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 = 0);//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 = newdouble[TotalNum]; DQn = newdouble[TotalNum]; X = newdouble[TotalNum]; Y = newdouble[TotalNum]; Z = newdouble[TotalNum]; } GpsNode::GpsNode(int TotalNum, int label) { if (label == 0) { 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 = newdouble[TotalNum]; DQn = newdouble[TotalNum]; X = newdouble[TotalNum]; Y = newdouble[TotalNum]; Z = newdouble[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的一些数据,每组数据大小不一样,所以每个结点的大小会不同。
原文:http://www.cnblogs.com/meadow-glog/p/4603627.html
内容总结
以上是互联网集市为您收集整理的C++链表全部内容,希望文章能够帮你解决C++链表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。