我正在进行一个散列项目,目前在链接列表数组方面遇到了困难.我的链表只能存储1个项目,所以我创建了一个包含2个成员变量(字符串键和字符串值)和各种成员函数的Pair类.我的问题是如何使Pair与我的Linked-list类一起工作?我的假设是执行以下操作:如果我想将数据添加到我的链表类中,我将使用参数创建一个函数 – void insert(Pair data) – 这会帮助我在列表中插入2个项目吗?这是我的c代码,有人可以为我校对,并帮我发现一些错误.
#ifndef List_h
#define List_h
#include "Node.h"
#include "Pair.h"
#include<string>
using namespace std;
class List{
private:
int size;
Node<string>* headPtr;
public:
List(); //default constructor
List(const List& anotherList); //copy constructor -iffy, I'm not sure if my definition for this function is correct-
virtual ~List(); //destructor
void insert(Pair data); //insert item
bool remove(Pair data); //remove item
bool find(Pair data); //find item
int getSize(); //size of list
bool isEmpty(); //checks if list is empty
void clear(); //clear list
};
#include "List.cpp"
#endif
的.cpp
//inserting data to list
void List::insert(Pair data){
Node<string>* newptr = new Node<string> (); //create new node
newptr->setItem(data); //set character into node
newptr->setNext(headPtr); //sets the ptr to headptr(null)
headPtr = newptr; //headptr points to the node you've just created
size++; //increment the size
}
//clears the entire list
void List::clear(){
Node<string>* delPtr = headPtr; //delPtr points to the top of the list
while(delPtr != nullptr){
headPtr = delPtr->getNext(); //sets the head pointer to the next node
delPtr->setNext(nullptr); //begins the process of removing the data from the top of the list here
delete delPtr;
delPtr = headPtr; //sets the delPtr to the headptr after deleting this way we will continue to delete data from the list until the list is empty
}
headPtr = nullptr;
delPtr = nullptr;
size = 0;
}
//destructor
List::~List() {
clear();
}
以下是我的Pair.h文件的外观:
#ifndef _Pair_h
#define _Pair_h
#include<iostream>
#include<string>
using namespace std;
class Pair{
private:
string key;
string value;
protected:
void setKey(const string& key);
public:
Pair();
Pair(string aValue, string key);
string getValue() const;
string getKey() const;
void setValue(const string& aValue);
};
#include "Pair.cpp"
#endif
这是我的Node.h文件:
#ifndef _NODE
#define _NODE
template<class ItemType>
class Node
{
private:
ItemType item; // A data item
Node<ItemType>* next; // Pointer to next node
public:
Node();
Node(const ItemType& anItem);
Node(const ItemType& anItem, Node<ItemType>* nextNodePtr);
void setItem(const ItemType& anItem);
void setNext(Node<ItemType>* nextNodePtr);
ItemType getItem() const ;
Node<ItemType>* getNext() const ;
}; // end Node
#include "Node.cpp"
#endif
尽管如此,我最好的猜测是,当我在字典ADT中创建一个列表数组时,我的私人成员将是:
List * hashtable [size];
const int size = 31; // 31是哈希表的任意素数
最佳答案 制作一个新的nlist = new List(); (创建一个新的列表对象),设置nlist headptr = anotherList.headptr.getItem()并继续将指向anotherList节点的ITEMS复制到你的nlist节点然后返回nlist;
newchainPtr-> setNext(nullptr);似乎没必要,你应该从anotherList检查NULL.链接列表数组表示链接列表对象的数组,节点是列表对象的一部分.
查看DEEP副本如果这让您感到困惑,您会发现它.确保释放任何未使用的内存.希望这可以帮助!