下面是头文件的代码:
#ifndef CHUNKLIST_H_ #define CHUNKLIST_H_ #include#include #include #define MAXLEN 1000 template class Chunklist { private: struct LNode { std::vector 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 chunksize void insertNode(T* nodeData,size_t chunksize); //get the header of the list so we can traverse the list LNode* getHeader(); //deleteNode bool deleteNode(LNode* delNOde); //find the first node have the keydata in the list LNode* searchNode(T keydata) { LNode* dstNode = this->header; std::vector ::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 list void display(); }; template void Chunklist ::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 list LNode* temp = new LNode; temp = header; while (temp->next) { temp = temp->next; } temp->next = newNode; newNode->next = nullptr; } } template bool Chunklist::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 weired template typename Chunklist ::LNode* Chunklist ::getHeader() { return header; } template void Chunklist ::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 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;
}