Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链表数组(使用哈希)_C++_Arrays_Dictionary_Linked List_Hashtable - Fatal编程技术网

C++ 链表数组(使用哈希)

C++ 链表数组(使用哈希),c++,arrays,dictionary,linked-list,hashtable,C++,Arrays,Dictionary,Linked List,Hashtable,我正在做一个散列项目,目前在处理一系列链表时遇到了困难。我的链表只能存储1项,所以我创建了一个包含2个成员变量(字符串键和字符串值)和各种成员函数的Pair类。我的问题是如何使结对与我的链表类一起工作?我的假设是这样做的:如果我想将数据添加到我的链表类中,我将使用参数-void insert(Pair data)创建一个函数-这是否有助于我在列表中插入2项?这是我的C++代码,有人能帮我读一下,帮我找出一些错误。p> #ifndef List_h #define List_h #include

我正在做一个散列项目,目前在处理一系列链表时遇到了困难。我的链表只能存储1项,所以我创建了一个包含2个成员变量(字符串键和字符串值)和各种成员函数的Pair类。我的问题是如何使结对与我的链表类一起工作?我的假设是这样做的:如果我想将数据添加到我的链表类中,我将使用参数-void insert(Pair data)创建一个函数-这是否有助于我在列表中插入2项?这是我的C++代码,有人能帮我读一下,帮我找出一些错误。p>
#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
\ifndef列表
#定义列表
#包括“Node.h”
#包括“Pair.h”
#包括
使用名称空间std;
班级名单{
私人:
整数大小;
节点*headPtr;
公众:
List();//默认构造函数
List(const List&anotherList);//复制构造函数-如果有问题,我不确定我对这个函数的定义是否正确-
virtual~List();//析构函数
无效插入(对数据);//插入项
bool remove(对数据);//删除项
bool find(对数据);//查找项
int getSize();//列表的大小
bool isEmpty();//检查列表是否为空
void clear();//清除列表
};
#包括“List.cpp”
#恩迪夫
.cpp

//将数据插入列表
无效列表::插入(对数据){
Node*newptr=newnode();//创建新节点
newptr->setItem(数据);//将字符设置为节点
newptr->setNext(headPtr);//将ptr设置为headPtr(null)
headPtr=newptr;//headPtr指向刚刚创建的节点
size++;//增加大小
}
//清除整个列表
无效列表::清除(){
Node*delPtr=headPtr;//delPtr指向列表的顶部
while(delPtr!=nullptr){
headPtr=delPtr->getNext();//设置指向下一个节点的头指针
delPtr->setNext(nullptr);//开始从列表顶部删除数据的过程
删除delPtr;
delPtr=headPtr;//删除后将delPtr设置为headPtr,这样我们将继续从列表中删除数据,直到列表为空
}
headPtr=nullptr;
delPtr=nullptr;
尺寸=0;
}
//析构函数
列表::~List(){
清除();
}
下面是我的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
\ifndef\u对
#定义配对
#包括
#包括
使用名称空间std;
类对{
私人:
字符串键;
字符串值;
受保护的:
无效设置键(常量字符串和键);
公众:
配对();
配对(字符串aValue、字符串密钥);
字符串getValue()常量;
字符串getKey()常量;
void设置值(常量字符串和aValue);
};
#包括“Pair.cpp”
#恩迪夫
这是我的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
\ifndef\u节点
#定义_节点
模板
类节点
{
私人:
ItemType item;//数据项
Node*next;//指向下一个节点的指针
公众:
Node();
节点(const ItemType和anItem);
节点(const ItemType&anItem,节点*nextNodePtr);
void setItem(const ItemType&anItem);
void setNext(节点*nextNodePtr);
ItemType getItem()常量;
节点*getNext()常量;
}; // 端节点
#包括“Node.cpp”
#恩迪夫
综上所述,我最好的猜测是,当我在字典ADT中创建列表数组时,我的私人成员将是:

List*哈希表[size]


const int size=31//31是哈希表的任意素数
(创建一个新的列表对象),
设置nlist headptr=anotherList.headptr.getItem()
并继续将指向
另一个列表
节点的项目复制到
nlist
节点,然后返回
nlist

newchainPtr->setNext(nullptr)
似乎没有必要,您应该从另一个列表中检查NULL。链表数组是指链表对象的数组,节点是链表对象的一部分


如果这让你感到困惑,请查找深层副本,你会发现它。确保释放所有未使用的内存。希望这有帮助

如果您希望您的
列表
类使用不同的类型,请使用模板。还显示您的
节点
类,因为不清楚如何在
setItem
方法中处理
的实例,以及为什么不使用
Node*
。你真的需要链表数组吗?也许成对数组就足够了?有人能看看我的复制构造函数吗?它似乎工作不正常@NikolayKondratyevI需要为我的哈希表创建一个链表数组以避免冲突@Nikolaykondratyeviv如果你需要避免冲突,那么该列表将不会只有一个项目,它应该使用相同的哈希处理所有项目。你的代码甚至可以编译吗?正如我所想的
newptr->setItem(数据)看起来不正确。您将如何修复
newptr->setItem(数据)@NikolayKondratyev
#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