标题:c++写的一个链式队列,求大神指点为什么输出的结果不对
只看楼主
宋立鹏
Rank: 2
等 级:论坛游民
帖 子:30
专家分:16
注 册:2012-7-5
结帖率:85.71%
 问题点数:0 回复次数:1 
c++写的一个链式队列,求大神指点为什么输出的结果不对
//hpp  链式队列节点类的实现
#include <iostream>
using namespace std;
 
template <class T>
class LinkQueueNode{
public:
    //LinkQueueNode();
    LinkQueueNode(T& value):data(value),Link(NULL){};
public:
    T& data;
    LinkQueueNode<T>* Link;
};
//hpp 链式队列的实现
#include <iostream>
#include "LinkQueueNode.h"
#include <assert.h>
using namespace std;

template <class T>
class LinkQueue{
public:
    LinkQueueNode<T>* front;
    LinkQueueNode<T>* tail;
public:
    LinkQueue():front(NULL),tail(NULL){ };
    ~LinkQueue();
    void push(T& element);
    T& pop();
    T GetTop();
    bool IsEmpty();
    void MakeEmpty();
};
template <class T>
LinkQueue<T>::~LinkQueue()
{}
template <class T>
void LinkQueue<T>::push(T &element)
{
    LinkQueueNode<T>* add=new LinkQueueNode<T>(element);
    if(tail==NULL)
    {
    front=tail=add;
    }
    else
        tail->Link=add;
    tail=tail->Link;
    //cout<<front->data<<endl;
    //cout<<tail->data<<endl;

}
//template <class T>
template <class T>
T&  LinkQueue<T>::pop()
{
    assert(!IsEmpty());
    LinkQueueNode<T>* old=front;
    T oldData=old->data;
    front=front->Link;
    if(tail==old)
        tail=NULL;
    delete old;
    return oldData;
}
template <class T>
T  LinkQueue<T>::GetTop()
{
    assert(!IsEmpty());
        return front->data;
        
}
template <class T>
bool LinkQueue<T>::IsEmpty()
{
    return
        front==NULL;

}
template <class T>
void LinkQueue<T>::MakeEmpty()
{
    while(!IsEmpty())
    {
        pop();
    }
}

//main()
#include "LinkQueue.h"
using namespace std;
void main()
{
    int a=1;
    int b=2;
    int c=3;
    LinkQueue<int> MyLinkQueue;
    MyLinkQueue.push(a);
    MyLinkQueue.push(b);
    MyLinkQueue.push(c);

    cout<<MyLinkQueue.GetTop()<<endl;

}
输出的结果不是应该是1吗,为什么会是3呢
搜索更多相关主题的帖子: public include 
2013-11-24 09:48
宋立鹏
Rank: 2
等 级:论坛游民
帖 子:30
专家分:16
注 册:2012-7-5
得分:0 
好吧,我自己已经找到错误所在了,在压入函数中,最后一行代码tail=tail->Link;要改成tail=add;就可以了
2013-11-24 22:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-424101-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048086 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved