队列的实现

时间:2010-12-02 15:51:28

标签: c++ queue

这是自学过程设计队列,这里是代码

#include <iostream>
using namespace std;
template <class T>
class Queue{

public:
     T * q;
     int n, head, tail;
public:
       Queue(int maxn){

           q=new T[maxn+1];
           n=maxn+1; head=n; 
           tail=0;



       }

       int  emty() const {
            return ((head%n)==tail);


       }
        void put(T k){
            a[tail++]=k; tail=tail%n;


        }
          T get(){
              head=head%n;  return q[head++];

          }
};
template <class T>
int main(){

    Queue<int>a(10);
    a.put(13);
    a.put(45);
    a.put(12);
    a.put(10);
    a.put(30);
    a.put(45);
    while(!a.emty()){
        cout<<a.get()<<"  ";


    }

    return 0;
}

这是错误

1>------ Build started: Project: QUEUE, Configuration: Debug Win32 ------
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>D:\c++_algorithms\QUEUE\Debug\QUEUE.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

请帮助

5 个答案:

答案 0 :(得分:3)

main函数不能是模板。只需删除它前面的template <class T>即可删除编译错误。

答案 1 :(得分:0)

定义这样的主要功能:int main()。这是一个特殊的功能,在开始时运行,你不能改变它的签名。

答案 2 :(得分:0)

q=new T[maxn+1];
n=maxn+1; 
head=n; 
tail=0;

您创建一个类型为T的数组,其大小为maxn + 1

你最多只能使用0;

设置head = maxn+1可能会导致问题,因为这是数组的'\ 0'

此外,

void put(T k)
{
    a[tail++]=k; 
    tail=tail%n;
}

你在这里做的有点奇怪。你在[tail]上分配值k,然后将尾部增加1,然后你将尾部k的余数分配给maxn + 1,如果我没有弄错的话,它总是与尾部相同?这不是多余的吗?想象一下尾巴是2,maxn是15,2%15 = 2.一般来说,你的整个方法有点奇怪。

也许你应该做一些数据结构研究。查找链接列表。对这样的结构使用数组并没有错,但也不正确。阵列装满后会发生什么?在那之后你将如何跟踪阵列上所有新插入的元素(假设你留出空间)以及你将如何知道哪些可以自由插入新东西?

答案 3 :(得分:0)

不要重新发明轮子,你应该使用std队列。

http://www.cplusplus.com/reference/stl/queue/

答案 4 :(得分:0)

#include<iostream>
using namespace std;
template < class type > class que {
    private:
        type arr[10000];
        int front, rear;
        public:
        que() {
            front = 0;
            rear = 0;
        }
        void insertion(type data) ;
        type deletion();
};

template<class type> type que<type>:: deletion() {
    cout<<front<<endl;
    return arr[front++];
}
template<class type> void que<type>:: insertion(type data) {
    cout<<rear<<" r"<<endl;
     arr[rear++] = data;
}

int main() {
    que<int> q;
    q.insertion(12);
    q.insertion(23);
    q.insertion(22222);
    cout<<q.deletion()<<endl;
    cout<<q.deletion()<<endl;
    cout<<q.deletion()<<endl;
}