gpt4 book ai didi

c++ - 从队列中删除所有项目 C++

转载 作者:行者123 更新时间:2023-11-30 04:23:57 32 4
gpt4 key购买 nike

如果我将一个队列实现为一系列节点(值,指向下一个节点的指针),那么遍历该队列并检查特定值并编辑队列的最佳方法是什么,以便包含该值的所有节点值将被删除。但否则队列的顺序将保持不变。

好的,这是描述所有功能的标题

class queue
{
public:
queue(); // constructor - constructs a new empty queue.
void enqueue( int item ); // enqueues item.
int dequeue(); // dequeues the front item.
int front(); // returns the front item without dequeuing it.
bool empty(); // true iff the queue contains no items.
int size(); // the current number of items in the queue.
int remove(int item); // removes all occurrances of item
// from the queue, returning the number removed.

private:
class node // node type for the linked list
{
public:
node(int new_data, node * next_node ){
data = new_data ;
next = next_node ;
}
int data ;
node * next ;
};

node* front_p ;
node* back_p ;
int current_size ; // current number of elements in the queue.
};

这是queue.cpp

#include "queue.h"
#include <stdlib.h>
#include <iostream>
using namespace std;

queue::queue()
{
front_p = NULL;
back_p = NULL;
current_size = 0;
}

void queue::enqueue(int item)
{
node* newnode = new node(item, NULL);
if (front_p == NULL) //queue is empty
front_p = newnode;
else
back_p->next = newnode;
back_p = newnode;
current_size ++;
}

int queue::dequeue()
{
//if there is only one node
int value = front_p->data;
if (front_p == back_p)
{
front_p = NULL;
back_p = NULL;
}
//if there are two or more
else
{
node* temp = front_p;
front_p = temp->next;
delete temp;
}
current_size --;
return value;
}

int queue::front()
{
if (front_p != NULL)
return front_p->data;
}

bool queue::empty()
{
if (front_p == NULL && back_p == NULL)
return true;
else
return false;
}

int queue::size()
{
return current_size;
}

int queue::remove(int item)
{
//?????
}

最佳答案

您需要遍历列表,检查每个节点的值。如果您看到序列 A -> B -> C,其中 B 是您要删除的值,您需要将链接从 A 更改为指向 C 而不是 B。

为此,您需要保留对您看到的最后一个节点和当前节点的引用。如果当前节点的值等于要删除的值,则将最后一个节点的下一个指针更改为当前节点的下一个指针。确保在继续之前释放当前节点的内存。

关于c++ - 从队列中删除所有项目 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13081702/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com