реализация очереди - PullRequest
       4

реализация очереди

0 голосов
/ 02 декабря 2010

это очередь на процесс самообучения, вот код

#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 ]

3 голосов
/ 02 декабря 2010

Функция main не должна быть шаблоном.Просто удалите template <class T> перед этим, чтобы удалить ошибку компиляции.

0 голосов
/ 02 мая 2017
#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;
}
0 голосов
/ 02 декабря 2010

Не изобретайте велосипед, вы должны использовать очередь std.

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

0 голосов
/ 02 декабря 2010
q=new T[maxn+1];
n=maxn+1; 
head=n; 
tail=0;

Вы создаете массив типа T с размером maxn + 1

Вы можете использовать только 0 до maxn;

настройка head = maxn+1 может вызвать проблемы, поскольку'\ 0' массива

Кроме того,

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

То, что вы здесь делаете, немного странно.Вы назначаете значение k на [tail], а затем увеличиваете tail на 1, а затем назначаете tail остаток от деления k с maxn + 1, который всегда будет таким же, как tail, если я не ошибаюсь?Разве это не избыточно?Представьте, что tail равен 2, а maxn равен 15, 2% 15 = 2. Как правило, весь ваш подход немного странный.

Может быть, вам стоит заняться изучением структур данных.Ищите Связанные Списки.Использование массивов для таких структур не является неправильным, но и неправильным.Что происходит, когда массив заполнен?Как вы собираетесь отслеживать все новые вставленные элементы в массиве после этого (при условии, что вы делаете пробел) и как вы узнаете, какие индексы свободны для вставки нового материала?

0 голосов
/ 02 декабря 2010

определить основную функцию следующим образом: int main().Это специальная функция, которая запускается в начале, и вы не можете изменить ее подпись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...