C++ FIFO队列链表的实现
下面是我尝试使用链表实现队列的代码:C++ FIFO队列链表的实现,c++,C++,下面是我尝试使用链表实现队列的代码: #include <iostream> #include <cstdlib> using namespace std; template <class Item> class Queue{ public: struct node{ Item item;node *next; node (Item x){ item=x; next=0; } };
#include <iostream>
#include <cstdlib>
using namespace std;
template <class Item>
class Queue{
public:
struct node{
Item item;node *next;
node (Item x){
item=x; next=0;
}
};
typedef node* link;
link head, tail;
public:
Queue(int){ head=0;}
int empty() const { return head==0; }
void put(Item x){
node* t=tail;
tail=new node(x);
if (head==0) head=tail;
else t->next=tail;
}
Item get(){
Item v=head->item;link t=head->next;
delete head; head=tail return v;
}
};
int main(){
return 0;
}
#包括
#包括
使用名称空间std;
模板
类队列{
公众:
结构节点{
项目;节点*下一步;
节点(项目x){
项目=x;下一个=0;
}
};
typedef节点*链接;
连杆头、连杆尾;
公众:
队列(int){head=0;}
int empty()常量{return head==0;}
作废认沽权证(第x项){
节点*t=尾部;
尾部=新节点(x);
如果(头==0)头=尾;
else t->next=tail;
}
项get(){
项目v=头部->项目;链接t=头部->下一步;
删除头部;头部=尾部返回v;
}
};
int main(){
返回0;
}
但我在指针方面有问题。例如,当我写入
Item v=head->
时,它应该显示选择项的选项,但不显示。此外,在->之后的代码的其他位置,此符号代码不允许我选择项目或下一步。请帮助。重用现有容器可能会更好
例如,STL显式包含队列
容器适配器(默认情况下基于deque
,这是最有效的选择)
如果您不需要多态行为,那么您需要的是std::queue
,它既非常高效(比您自定义的基于列表的队列更高效),又可以避免内存管理问题
如果您需要多态行为,那么使用
std::queue
ON:->操作符可能会过载,因此开发环境无法确定如何处理它。如果您真的想自动完成,可以执行以下操作(临时或永久)
// IMPORTANT. Make sure "head" is not null before you do it!
Node &headNode(*head); // Create a reference
headNode.next = tail; // Use TAB or CTRL+SPACE or whatever here after dot
关:我检查了你的代码并做了一些更正
template <class Item>
class Queue {
public:
Queue()
: head(0)
, tail(0)
{ }
bool empty() const { return head==0; }
void put(const Item& x)
{
Node* t = tail;
tail = new Node(x);
if (head==0)
head = tail;
else
t->next = tail;
}
Item get()
{
Item v = head->item;
Link t = head->next;
delete head;
head = t;
if(head==0)
tail = 0;
return v;
}
private:
struct Node {
Item item;
Node *next;
Node(const Item& x)
: item(x)
, next(0)
{}
};
typedef Node* Link;
Link head,tail;
};
模板
类队列{
公众:
队列()
:头(0)
,尾(0)
{ }
bool empty()常量{return head==0;}
作废认沽权(常数项和x)
{
节点*t=尾部;
尾部=新节点(x);
如果(头==0)
头=尾;
其他的
t->next=tail;
}
项目获取()
{
项目v=头->项目;
链接t=头部->下一步;
删除标题;
水头=t;
如果(头==0)
尾=0;
返回v;
}
私人:
结构节点{
项目;
节点*下一步;
节点(常数项和x)
:项目(x)
,下一(0)
{}
};
typedef节点*链接;
连杆头、连杆尾;
};
- 从
构造函数中删除了Queue
类型化的无名参数int
- 将
重命名为节点
并将节点
重命名为链接
,因为链接
是项
,而不是项
。只是为了让它有点标准化项
- 在
队列的构造函数处初始化
tail
- 尽可能使用初始值设定项列表而不是代码
- 正在修复
,如果队列变空,则将Queue::get()
设置为零tail
- 在
和Queue::put()
Queue::Node::Node()
,节点
,链接
和头部
从现在起是私有的尾部
从现在开始返回Queue::empty()
而不是bool
int
它应该向我显示选择的选项:你想让你的IDE(你的编辑器)显示头的成员列表吗?或者别的什么?是的,但它不显示meOk,但这不是FIFO队列链表实现的问题,而是编辑器的问题。你在用什么编辑器?我已经很久没有使用VS了,但我知道它的智能感知有时不起作用。所以,试试谷歌搜索“VisualStudio2010IntelliSense不起作用”或类似的东西。“不要重新发明轮子,除非你计划学习更多关于轮子的知识。”我认为你设计的答案太多了。他只是编辑的自动补全功能有问题。@cevalek:我想也是,不过在评论之前还不清楚。有趣的是,我仍然为此获得选票,所以我想我不是唯一一个没有抓住真正问题的人。