如果我有一個實現爲一系列節點(值,指向下一個節點的指針)的隊列,那麼橫切該隊列並檢查特定值以及編輯隊列的最佳方式是什麼這樣包含該值的所有節點都將被刪除。但隊列的順序將保持不變。從隊列中刪除所有項C++
確定這裏是描述的所有功能
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)
{
//?????
}
你是什麼意思_check?檢查隊列中是否存在特定值? – jogojapan
那麼,你只要遍歷它,並隨時移除節點。沒有看到你的實施,我真的不知道我們能在這裏如何幫助你。 – Mat
最好的方法是編寫一些完全符合你所說的代碼。對不起,如果這看起來很奇怪,但你期待什麼樣的答案?除非您對問題的內容有所瞭解(通過發佈代碼或解釋它是什麼,例如您不明白),這很難提供幫助。我猜想你被困在如何從列表中刪除節點,但如果是這樣的話,請說出來。 – john