当前位置: 首页 > 知识库问答 >
问题:

用类实现C++中的链表队列

乐钱青
2023-03-14

我有一个链表类,这样实现(也进行了测试):

template <class T>
class LList {
    LNode<T>* head;
    LNode<T>* tail;
    int size; // proporciona muitas vantagens
    LNode<T>* rCopy(LNode<T>* right);
public:
    LList() : head(nullptr), tail(nullptr), size(0) {}
    LList(const LList& other) :
            head(nullptr), tail(nullptr), size(0) {
        *this = other;
    }
    ~LList() { clear(); }

...
    // O(1)
    void insertAtBack(T newvalue) {
        LNode<T>* tmp = new LNode<T>(newvalue, nullptr);
        tail->next = tmp;
        tail = tmp;
        if (head == nullptr)
            head = tmp;
        this->size++;
    }
...
};

然后,我创建了一个队列类:

template <class T>
class Queue {
private:
    LList<T> lista;
public:
//    Queue() : lista() {} ??? don't know how to do it
    void enqueue(T element);
    T peek();
    void dequeue();
    int size();
    bool isEmpty();
    void sizeLog();
};

template<class T>
void Queue<T>::enqueue(T element) {
    lista.insertAtBack(element);
}

但是我不能在main上使用它,任何入队的尝试都会导致for循环崩溃,返回错误代码-1073741819。函数isEmpty()工作并显示true

Queue<int> f;
std::cout << "created" << endl;
std::cout << f.isEmpty() << endl;

for (int i=0; i<10; i++) {
    f.enqueue(i*5);
}

输出:

created
1

Process finished with exit code -1073741819 (0xC0000005)

我尝试为队列类编写一个构造函数来初始化LList类,但找不到正确的方法。如果我编写一个main函数只测试LList类,我就不需要初始化了,因为它的构造器已经在继续这个工作了。

共有1个答案

章晗日
2023-03-14

最初,tail、headnullptr所以当插入第一个元素时,您尝试访问insertatback中的tail->next,其中tailnullptr导致错误(可能是未捕获的异常),如果tailnullptr,只需给它分配tmp值。放置nullptr检查表达式,如下所示。


// O(1)
    void insertAtBack(T newvalue) {
        LNode<T>* tmp = new LNode<T>(newvalue, nullptr);

        // if it is nullptr, 
        // it is the first and only element
        // so head = tail = tmp
        if(tail != nullptr) 
            tail->next = tmp;
        tail = tmp;
        if (head == nullptr)
            head = tmp;
        this->size++;
    }

``
 类似资料:
  • 我得到了这些结构声明,以便实现使用循环链表的队列集合。 我试图创建一个函数,它将以指定的值排队(将其追加到队列的后面),我需要考虑队列为空和队列有一个或多个元素的两种情况。这是我到目前为止的代码: 这段代码给了我一个运行时错误,所以我不确定出了什么问题。在代码中,我假设队列-

  • 本文向大家介绍C++实现的链表类实例,包括了C++实现的链表类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++实现的链表类。分享给大家供大家参考。具体如下: 希望本文所述对大家的C++程序设计有所帮助。

  • 本文向大家介绍C#通过链表实现队列的方法,包括了C#通过链表实现队列的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#通过链表实现队列的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍C语言单链队列的表示与实现实例详解,包括了C语言单链队列的表示与实现实例详解的使用技巧和注意事项,需要的朋友参考一下 1.概述: C语言的队列(queue),是指先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。 而单链队列使用链表作为基本数据

  • 在试图理解如何在C#中实现单个列表时,我遇到了下面的链接: 创建一个非常简单的链表。 然而,由于我是C#的新手,我被上面讨论的第一部分中列出的语法弄糊涂了。正在声明一个名为节点的类,并且在声明为“公共节点下一个”的类中还有另一个语句。这个语句称为构造函数吗?请帮忙。

  • 本文向大家介绍C语言单链表的实现,包括了C语言单链表的实现的使用技巧和注意事项,需要的朋友参考一下 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。 链表结构: SList.h SList.cpp Test.cpp 以上内容是小编给大家介绍的C语言单链表的实现代码,希望对大家有所帮助!