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

分段错误,在这段代码中,使用这段代码创建了一个使用链表[关闭]的队列

徐英锐
2023-03-14

给出的代码打印1 0 12然后显示分段错误,尝试了很长时间来解决这个问题,但没有发现错误,请帮助:我没有看到分段错误的原因,一直在尝试用链表实现队列,尝试使用不同的编译器,但没有帮助。在给定的代码中,如果可能的话,请找出错误,并告诉我如何改进这段代码


#include<iostream>
using namespace std;
class Node
{
    public:
        int data;
        Node *next;
        Node(int n)
        {
            data=n;
            next=NULL;
        }
};
class queueLinked
{
    int count;
    Node* head;
    Node* tail;
    public:
        queueLinked()
        {
            count=0;
            head=NULL;
        }
        int size()
        {
            return count;
        }
        bool empty()
        {
            return count==0;
        }
        int front()
        {
            if(head==NULL)
            {
                cout<<"EMPTY QUEUE";
                return 0;
            }
            return head->data;
        }
        void enqueue(int a)
        {
            Node *temp=new Node(a);
            if(head==NULL)
            {
                head=temp;
                tail=temp;
                count=1;
                return;
            }
            tail->next=temp;
            tail=tail->next;
            count++;
        }
        void dequeue()
        {
            if(head=NULL)
            {
                cout<<"EMPTY QUEUE"<<endl;
                return;
            }
            Node *temp=head;
            head=head->next;
            delete temp;
            count--;
        }
};
int main()
{
    queueLinked a;
    a.enqueue(12);
    cout<<a.size()<<endl;
    cout<<a.empty()<<endl;
    a.enqueue(13);
    cout<<a.front()<<endl;
    a.dequeue();
    cout<<a.front()<<endl;
    a.dequeue();
    a.dequeue();
    cout<<a.empty()<<endl;
    cout<<a.size()<<endl;
    cout<<a.front()<<endl;
}

共有1个答案

淳于宏伯
2023-03-14

您的代码几乎是正确的它缺少了“==”条件,还有一点您应该将head->移动到temp旁边,否则当您删除head时,关于下一个节点的所有信息也将被删除。

void dequeue()
    {
        if (head == NULL)
        {
            cout << "EMPTY QUEUE" << endl;
            return;
        }
        // Node* temp = head;
        
        Node* temp = head->next;
        delete head;
        head = temp;
        count--;
    }
 类似资料:
  • 执行者。newFixedThreadPool(5)在池中创建5个线程,然后在循环中再创建100个线程。这种理解正确吗?然后池中的5个线程将执行100个工作线程队列中的每个线程。 总共创建了105个线程?我原以为只创建了5个线程,但每个也是一个线程。

  • 我熟悉在一个账户和另一个账户之间转账时使用同步的并发示例,例如,两个账户的锁定是按账号顺序进行的,这样就不会发生死锁。 我想探索使用Reenter antReadWriteLock,因为在我看来,这将允许帐户对象的客户端进行并发读取,前提是没有客户端更新该对象。 我已经编写了代码并对其进行了测试,它似乎可以工作,但看起来有点难看,例如,Account类暴露其锁对象看起来有点奇怪,但它似乎必须这样做

  • 这段代码是我用Java Swing制作的Tic-Tac-Toe程序的一部分。为什么在添加用于添加按钮的for语句时返回NullPointerException?

  • 令牌“if”的语法错误(应在此令牌之后 谢谢你的建议!

  • 当我尝试编译时,这段代码给出了错误?

  • 我发现了以下代码。我知道,它看起来没有使用看似随机的数字那么奇怪/令人兴奋,但它似乎比使用大数字上的位移位更复杂: 创意上的代码 输出: 你好,世界 它是如何工作的?它是某种形式的加密还是有人对它的构建感到愤怒?