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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шестнадцатеричная цифра http://www.cyberforum.ru/cpp-beginners/thread228760.html
как вывести k-ую справа шестнадцатеричную цифру целого положительного числа на экран в десятичной записи? что-то я не совсем понимаю...ну допустим дана запись 0000 0000 1010 1010 и надо вывести 3ю...
C++ Ошибки компиляции Пожалуйсто,помогите! Очень надо #include <cmath> #include <cstdio> #include <cstdlib> #include <ctime> struct Point { int x; int y; }; http://www.cyberforum.ru/cpp-beginners/thread228738.html
восемь ферзей на билдере C++
Нужно переделать из консольного текста в С++ builder ( то есть с модулями, интерфейсом) Задача о восьми ферзях: //---------------------------------------------------------------------------...
Считывание из файлов C++
Нужно составить программу на С++, программа считывания из файлов, помогите кто может
C++ Однонаправленный список не могу переделать!!! http://www.cyberforum.ru/cpp-beginners/thread228704.html
Огромная просьба помочь с реализацией однонаправленного списка. Так то список есть НО! мне нужно чтобы он работал со строками а не с цифрами. Примерно так вывдил запрос "Введите кол-во студентов:3...
C++ Функция сортировки матрицы Функция сортировки матрицы по убыванию элементов 1 строки подробнее

Показать сообщение отдельно
blackbanny
130 / 117 / 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();
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru