链表数组(使用哈希)



我正在做一个哈希项目,目前在处理一组链表时遇到了困难。我的链表只能存储1个项目,所以我创建了一个Pair类,其中包含2个成员变量(字符串键和字符串值)和各种成员函数。我的问题是如何使Pair与我的链表类一起工作?我的假设是:如果我想将数据添加到我的链表类中,我会创建一个带有参数的函数-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 is a arbitrary prime number for the hashtable

Make a new nlist = new List();(创建一个新的列表对象),set nlist headptr = anotherList.headptr.getItem(),并继续将指向anotherList节点的ITEMS复制到您的nlist节点,然后返回nlist

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

如果这让你感到困惑,你会发现它的。确保释放出任何未使用的内存。希望这能有所帮助!

相关内容

  • 没有找到相关文章

最新更新