Форум программистов, компьютерный форум CyberForum.ru

Очередь на основе массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ VSTO 2007 http://www.cyberforum.ru/cpp-beginners/thread228725.html
Добрый день!Подскажите где можно найти литературу по Visual Studio Tools for Office 2007 на русском языке. Для написания add-in под MS Project 2007. писать буду на Visual C# или Vicual C++.
C++ Сокращение расстояния Хэмминга Добрый день, уважаемые форумчане. Есть у меня следующая ситуация: имеем два массива одинаковой длины типа unsigned int, например arr1 и arr2 (на самом деле размерность может быть любой). Необходимо сократить расстояние Хэмминга между этими двумя наборами чисел, т.е., имеем, например, следующие числа arr1 656546345 15632489 arr2 606214697 78559272 которые в двоичном коде выглядят как arr1... http://www.cyberforum.ru/cpp-beginners/thread228708.html
Слова-анаграммы C++
Для заданного с клавиатуры слова построить все его анаграммы, т.е. слова (возможно бессмысленные), состоящие из всех букв исходного слова, но расположенных в произвольном порядке. Хотя бы намекните, как реализовать
C++ Реализация стека
вот такие ошибки при реализации: stack.h(26) : error C2953: 'Stack' : class template has already been defined liststack.h(10) : error C2955: 'Stack' : use of class template requires template argument list boundstack.h(6) : error C2955: 'Stack' : use of class template requires template argument list вот сами классы: BoundStack.h #include "Stack.h" #include <iostream>
C++ Реализовать игру человека и машины по заполнению “Греко-латинского квадрата” http://www.cyberforum.ru/cpp-beginners/thread228309.html
Помогите решить программу на C++. “Греко-латинским квадратом” порядка N называют матрицу (N, N), в каждом столбце, каждой строке и обеих диагоналях которого содержатся все целые числа от1 до N . Реализовать игру человека и машины по заполнению “Греко-латинского квадрата”. Проигрывает тот, кто первым не сумеет сделать допустимый ход.
C++ Нажно написать программу на языке програм С "моделирование движения" Нужно написать программу моделирующую движение спутника вокруг планеты. Грубо говоря написать программу в которой будет один объект вращаться вокруг второго. Писать можно любыми способами но: программа должно быть написана на языке С а не С++ спутник не вращается вокруг своей оси,планета не вращается вокруг своей оси, спутник вращается только вокруг планеты, вращение происходит в 1 плоскости... подробнее

Показать сообщение отдельно
blackbanny
129 / 116 / 2
Регистрация: 14.11.2010
Сообщений: 707
15.01.2011, 12:45  [ТС]     Очередь на основе массива
тут загвоздка произошла, когда делала на основе кольцевого списка очередь...
в main() CircularListQueue <int> b(3);

ошибка:
C++
1
main.cpp(18) : error C2664: 'CircularListQueue<T>::CircularListQueue(const CircularListQueue<T> &)' : cannot convert parameter 1 from 'int' to 'const CircularListQueue<T> &'
CircularListQueue.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "Queue.h"
#include "CircularList.h"
#include <iostream>
#pragma once
using namespace std;
//Шаблон, представляющий реализацию абстрактной
//очереди ограниченного размера в кольцевого списка элементов
 
template <class T>
class CircularListQueue: public Queue<T>
{
    CircularList<T> list; //Базовый список
 
public:
    //Конструкторы и деструкторы.
    CircularListQueue(): list() {}
    CircularListQueue(const CircularListQueue & src) {list = src.list;}
    virtual ~CircularListQueue() {}
 
    //Теперь определим и реализуем все абстрактные операции.
    void enqueue(const T & item) {list.insertTail(item);}
    void dequeue();
    bool empty() const {return list.empty();}
    T & head();
    const T & head() const;
    T & tail();
    const T & tail() const;
};
 
//Оперция удаления из очереди
template <class T> void CircularListQueue<T>::dequeue()
{
        return list.removeHead();
}
 
//Функции доступа к головному элементу очереди
template <class T> T & CircularListQueue<T>::head()
{
    return list.head();
}
 
template <class T> const T & CircularListQueue<T>::head() const
{
    return list.head();
}
 
//Функции доступа к хвостовым элементам списка
template <class T> T & CircularListQueue<T>::tail()
{
    return list.tail();
}
 
template <class T> const T & CircularListQueue<T>::tail() const
{
    return list.tail();
}
CircularList.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#pragma once
#include <iostream>
using namespace std;
//Реализация шаблона класса кольцевого списка
template <class T> 
class CircularList
{
    //Элементы списка состоят из собственно хранимого значения 
    //и указателя на следующий элемент списка
 
    struct ListItem{
        T item; //элемент списка
        ListItem *next; //указатель на следующий
 
        ListItem(T i, ListItem *n) {item = i; next = n}
        };
 
    //Список представлен указателем на последний элемент списка,
    //который, в свою очередь, содержит указатель на первый элемент.
    //Этот указатель будет пустым, если список не содержит элементов.
 
public:
 
    //Конструктор по умолчанию создает новый список.
    CircularList() { last = NULL;}
 
    //Конструктор копирования создает
    //копию аргумента с помощью присваивания.
    CircularList(const CircularList<T> & src) {*this = src;}
 
    //Деструктор освобождает память, занятую элементами списка.
    virtual ~CircularList() {destroy();}
 
    //Вставка новых элементов может производиться
    //как в начало, так и в конец.
    void insertHead(const T & item);
    void insertTail(const T & item);
 
    //Удалять можно только первый элемент
    void removeHead();
 
    //Функция 'empty' проверяет, содержит ли список хоть один элемент.
    bool empty() {return last;}
 
    //Функции доступа дают возможность чтения/записи
    //в первый и последний элементы списка
    T & head();
    const T & head() const;
    T & tail();
    const T & tail() const;
 
    //Оператор присваивания 
    CircularList<T> & operator = (const CircularList<T> & src);
 
    //Функция разрушает список, освобождает память, занятую под его элементами.
    void destroy();
};
 
template <class T> void CircularList<T>::insertHead(const T &item)
{
    if(last == NULL) {
        //Новый элемент будет одновременно первым и последним 
        last = new ListItem(item);
        last->next = last;
    }else 
        //Новый элемент вставляется за последним
        last->next = new ListItem(item, last->next);
}
 
template <class T> void CircularList<T>::insertTail(const T &item)
{
    insertHead(item);
    //Чтобы первый элемент стал последним в кольцевом списке,
    //достаточно сдвинуться вперед на один шаг 
    last = last->next;
}
 
template <class T> void CircularList<T>::removeHead()
{
    if(last == NULL) throw QueueUnderflow("QueueUnderflow!");
    if(last->next == last)
    {
        //удаляется единственный элемент
        delete last;
        last = NULL;
    }else
    {
        ListItem *itemToDelete = last->next;
        last->next = last->next->next;
        delete itemToDelete;
    }
}
 
template <class T> T & CircularList<T>::head()
{
    if(last == NULL) throw QueueUnderflow("Queue Underflow!");
    return last->next->item;
}
 
template <class T> const T & CircularList<T>::head() const
{
    if(last == NULL) throw QueueUnderflow("Queue Underflow!");
    return last->next->item;
}
 
template <class T> T & CircularList<T>::tail()
{
    if(last == NULL) throw QueueUnderflow("Queue Underslow!");
    return last->item;
}
 
template <class T> const T & CircularList<T>::tail() const
{
    if(last == NULL) throw QueueUnderflow("Queue Underslow!");
    return last->item;
}
 
//Оператор присваивания 
template <class T> CircularList<T> & CircularList<T>::operator =(const CircularList<T> & src)
{
    destroy();
    if(!src.empty())
    {
        ListItem *current = src.last->item; //указатель на первый элемент
        do{
            insertTail(current->item);
            if(current == src.last) break; //последний элемент добавлен
            current = current->next;
        }while(true);
    }
    return *this;
}
 
template <class T> void CircularList<T>::destroy()
{
    while(last) removeHead();
}
 
Текущее время: 05:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru