chunklist——实现链表单节点存储多个数据
来源:互联网 发布:java 坐标 编辑:程序博客网 时间:2024/06/06 07:18
自己动手实现了单链表,链表的节点中能够存储变长数据,在实现中借用了STL的vector来实现。并且实现了一些单链表的简单的接口操作,如果您感觉代码有任何的问题,欢迎大家能够批评指正,共同学习进步。
下面是头文件的代码:
#ifndef CHUNKLIST_H_#define CHUNKLIST_H_#include <vector>#include <iostream>#include <iterator>#define MAXLEN 1000template<typename T>class Chunklist{private:struct LNode{std::vector<T> value;LNode* next;};LNode* header;public:Chunklist(): header(nullptr){}~Chunklist(){while (header != nullptr){LNode* tempNode = header->next;delete header;header = tempNode;}}//insert one node into the list,followed by the chunksizevoid insertNode(T* nodeData,size_t chunksize);//get the header of the list so we can traverse the listLNode* getHeader();//deleteNodebool deleteNode(LNode* delNOde);//find the first node have the keydata in the listLNode* searchNode(T keydata){LNode* dstNode = this->header;std::vector<T>::iterator findit = find(dstNode->value.begin(), dstNode->value.end(),keydata);while (findit == dstNode->value.end()){dstNode = dstNode->next;if (dstNode == nullptr){return nullptr;}findit = find(dstNode->value.begin(), dstNode->value.end(),keydata);}return dstNode;}//show the detail of the listvoid display();};template<typename T>void Chunklist<T>::insertNode(T* nodeData, size_t chunksize){LNode* newNode = new LNode;for (size_t i = 0; i < chunksize; i++){newNode->value.push_back(nodeData[i]);}if (header == nullptr){header = newNode;newNode->next = nullptr;}else {//put the newNode into the tail of the listLNode* temp = new LNode;temp = header;while (temp->next){temp = temp->next;}temp->next = newNode;newNode->next = nullptr;}}template<typename T>bool Chunklist<T>::deleteNode(LNode* delNode){if (delNode == nullptr){return false;}LNode* tempNode = header;if (header == delNode){header = header->next;delete tempNode;return true;}while (tempNode->next != delNode){tempNode = tempNode->next;if (tempNode == nullptr){return false;}}if (delNode->next != nullptr){tempNode->next = delNode->next;}else{tempNode->next = nullptr;}delete delNode;return true;}//experience two kind of function define,it is weiredtemplate<typename T>typename Chunklist<T>::LNode* Chunklist<T>::getHeader(){return header;}template<typename T>void Chunklist<T>::display(){LNode* tempNode = header;int nodeNo = 0;while (tempNode != nullptr){std::cout << "the"<< nodeNo+1 <<" node's value is: ";for (size_t i = 0; i < tempNode->value.size(); i++){std::cout << tempNode->value[i]<<" ";}nodeNo++;std::cout << std::endl;tempNode = tempNode->next;}}#endif
然后就是测试文件,简单的测试了一下。
#include "stdafx.h"#include "chunklist.h"int main(){Chunklist<int> mylist;int array[10][10];int * array_one_data = new int(8);int array_more_data[20] = {1,2,3,4,5,6,7,8,9,7,8,9,1,2,3,4,5,6,7,3};int numer;for (int j = 0; j < 10; j++){for (int i = 0; i < 10; i++){array[j][i] = j;}}mylist.insertNode(array[1],10);mylist.insertNode(array[2],10);mylist.insertNode(array[3],10);mylist.insertNode(array[4],10);mylist.insertNode(array_more_data,20);mylist.insertNode(array_one_data,1);numer = mylist.deleteNode(mylist.searchNode(8));mylist.display();delete array_one_data;system("pause");return 0;}
- chunklist——实现链表单节点存储多个数据
- 链表单个节点的删除
- 如何实现集群多个节点之间的数据同步
- Form 表单实现多个Action 请求,将表单数据提交到不同请求
- 多个源节点向多个目标节点发数据
- ValueStack和OGNL实现Struts2表单数据的存储原理
- 模拟后端存储数据,实现表单的注册和登录
- 实现多个WEB页面要接收同一个表单的数据的功能
- 多个form表单之间的数据在一个方法中实现,利用入口思想
- PHP中实现接收多个name相同但Value不相同表单数据
- Zookeeper客户端基本操作java实现——创建连接、创建节点、添加修改节点内容、获取子节点、获取节点数据、删除节点
- yii笔记—利用页面表单实现数据的添加
- openstack安装部署8——块存储组件(控制节点、计算节点、存储节点)
- 同时存储多个数据到数据库
- 24c02存储多个数据
- 输出链表倒数第n个节点数据
- lintcode——链表倒数第n个节点
- yii 一个表单提交多个模型数据
- 23种设计模式彩图
- myeclipse 导入新工程 乱码解决方法总结 (转)
- ExtJS 4.2 教程-06:服务器代理(proxy)
- IOS 定时器(NSTimer)的使用
- ExtJS 4.2 教程-07:Ext.Direct
- chunklist——实现链表单节点存储多个数据
- kvm虚拟化技术:实战与原理解析
- H.264详解
- Sigslot介绍
- android调试常用工具
- msm7x27a添加camera差值以及添加新拍照分辨率尺寸
- 纯CSS3实现的瀑布布局
- 注意力偏差
- JAVA 笔记,常见BUG