链接列表/堆栈/队列 - 帮助出列

时间:2011-07-27 04:51:05

标签: c++ queue linked-list stack

我必须编写链表,然后将其转换为动态堆栈,然后将其转换为动态队列。好吧一切似乎都工作,除了“dequeuing”,正如程序即将完成,它给了我一个错误:“LinkedList_Stack_BNS11.exe [4972]发生了未处理的win32异常。”。

我只是假设它是出列的,因为当我单步执行和/或运行程序时,它会一直运行到那个部分,所以也许我发送了一个指针错误或什么?

输出:

获取5件物品.... // Finsihes

队列中的值是(Dequeuing):

0

1

2

//在队中纠正数字,但......

//程序在这里给出了错误。什么时候应该完成并关闭。

如果我包含太多代码,请告诉我,我会将其删除为“Dequeuing”(这是以下所有内容的中间部分)

预先感谢您的帮助!!我只是没有看到我做错了什么。认为它可能与“头”指向的位置有关? IDK。

标题文件:

class NumberList
{
private:
    //
    struct ListNode
    {
        int value;  // Value in this node
        struct ListNode *next; // Pointer to the next node
    };

    ListNode *head; // List head pointer
    ListNode *rear;

public:
    //Constructor
    NumberList()
    { head = NULL; rear = NULL; }

    //Destructor
    ~NumberList();

    //Stack operations
    bool isEmpty();

    //Queue operations
    void enqueue(int);
    void dequeue(int &);
};
#endif

List_Stack_Queue.cpp:

bool NumberList::isEmpty()
{
    bool status;

    if(!head)
        status = true;
    else
        status = false;

    return status;
}

     void NumberList::enqueue(int num)
    {
        ListNode *newNode; // Point to a new node

        // Allocate a new node and store num there.
        newNode = new ListNode;
        newNode->value = num;

        //If there are no nodes in the list
        // make newNode the first node.
        if(isEmpty())
        {
            head = newNode;
            rear = head;
            //newNode->next = NULL;
        }
        else
        {
            rear->next = newNode;
            rear = rear->next;
            //newNode->next = head;
            //head = newNode;
        }
    }

    void NumberList::dequeue(int &num)
    {
        ListNode *temp;

        if(isEmpty())
            cout << "The queue is empty.\n";
        else
        {
            num = head->value;
            temp = head;
            head = head->next;
            delete temp;
        }
    }

主要

const int MAX_VALUES = 3;

// Create a DynIntQueue object.
NumberList iQueue;

// Enqueue a series of numbers.
cout << "Enqueuing " << MAX_VALUES << " items...\n";
for (int x = 0; x < MAX_VALUES; x++)
    iQueue.enqueue(x);

cout << endl;

//Dequeue and retrieve all numbers in the queue
cout << "The values in the queue were (Dequeuing):\n";
while(!iQueue.isEmpty())
{
    int value;
    iQueue.dequeue(value);
    cout << value << endl;
} 
return 0;

1 个答案:

答案 0 :(得分:2)

最后一个节点的下一个元素应该在链表中设置为 NULL 。所以,

void NumberList::enqueue(int num)
{
    // ...
    if(isEmpty())
    {
        head = newNode;
        head->next = NULL;
        rear = head;
    }
    else
    {
        rear->next = newNode;
        rear = rear->next;
        rear->next = NULL;     // Pointing the next node element to null.
    }
}

对我而言,Numberlist::isEmpty();成员函数似乎有些问题。你如何判断列表是否为空?显示它的定义。