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:我想也是,不过在评论之前还不清楚。有趣的是,我仍然为此获得选票,所以我想我不是唯一一个没有抓住真正问题的人。