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

Смоделировать очередь с помощью масива - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как сортировать массив при помощи функцыи sort http://www.cyberforum.ru/cpp-beginners/thread379189.html
#include "stdafx.h" #include <iostream> int _tmain(int argc, _TCHAR* argv) { int mas ; int i; for (i=0;i<8;i++) { if ((i % 2)==0)
C++ Найдите ошибки #include <stdio.h> void main() { printf("Vvod distancii v km\n",s); scanf("%f",&s); printf("Vvod vrema v sec\n",t); scanf("%f",&t); printf("Vvod skorost v km/sec\n",v); http://www.cyberforum.ru/cpp-beginners/thread379188.html
выделение и освобождение памяти C++
В моей программе есть следующий код: char* lexems; // массив указателей на символ char* lexem; // вспомогательная переменная для хранения слова char string = "The quick brown fox jumps over the lazy dog"; lexem = strtok(string," ,.-"); lexems = new char;
C++ Поменять местами строки матрицы
Здравствуйте. Вот проблемка какая у меня с прогой, дана матрица A(5*6) поменять местами в этой матрицы элементы 1 и 2 строчки 3 и 4 строчки
C++ Найдите ошибку в тексте программы http://www.cyberforum.ru/cpp-beginners/thread379154.html
#include <iostream.h> #include <math.h> #include <windows.h> char buf ; char *rus(char *s) {CharToOem(s,buf); return buf;} void main () { cout << ( " programma dl9 vi4esleni9 sostavnoe fynkcii " ) << endl; double s,x,fx,b,e,r; char q;
C++ Что такое _Bx в классе string Пытаюсь записать дату : time_t rawtime; time(&rawtime); string str = ctime(&rawtime); string dataTime = str; это текст из текстового поля: string Name = (Form->Edit1->Text).t_str(); См. картинки подробнее

Показать сообщение отдельно
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
07.11.2011, 19:23     Смоделировать очередь с помощью масива
Касательно второго задания.
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
#include <iostream>
#include <iomanip>
 
const int STEP = 10;
 
template <class T>
class Queue
{
public:
    Queue();
    Queue(const int); 
    ~Queue();
    void push(const T);
    T pop();
    int size() const;
    bool isEmpty() const;
    T& front();
    T& back();
    
private:
    T *queue;
    T *begin;
    T *end;
    int queueSize;
    int count;
};
 
template <class T>
Queue<T>::Queue(): queueSize(STEP), count(0)
{
    queue = new T [queueSize];
    begin = &queue[0];
    end = &queue[0];
}
 
template <class T>
Queue<T>::Queue(const int size): queueSize(size), count(0)
{
    if(queueSize <= 0)
        queueSize = STEP;
    queue = new T [queueSize];
    begin = &queue[0];
    end = &queue[0];
}
 
template <class T>
Queue<T>::~Queue()
{
    delete[] queue;
}
 
template <class T>
void Queue<T>::push(const T num)
{
    if((end - 1) != &queue[queueSize - 1])
    {
        *(end) = num;
        ++end;
    }
    else
    {
        int cnt = end - begin;
        if(begin == &queue[0])
            queueSize += STEP;
        T *buf = new T [cnt];
        for(int i = 0; i < cnt; ++i)
            buf[i] = *(begin + i);
        delete[] queue;
        queue = new T [queueSize];
        begin = &queue[0];
        end = &queue[0];
        for(int i = 0; i < cnt; ++i)
        {
            *end = buf[i];
            ++end;
        }
        *(end) = num;
        ++end;
        delete[] buf;
    }
}
 
template <class T>
T Queue<T>::pop()
{
    ++begin;
    return *(begin - 1);
}
 
template <class T>
int Queue<T>::size() const
{
    return end - begin;
}
 
template <class T>
bool Queue<T>::isEmpty() const
{
    return ((end - begin) == 0);
}
 
template <class T>
T& Queue<T>::front()
{
    return *begin;
}
 
template <class T>
T& Queue<T>::back()
{
    return *(end - 1);
}
 
int main()
{
    Queue<int> q;
    for(int i = 0; i < 20; ++i)
        q.push(i + 1);
    /*while(!q.isEmpty())
        std::cout << q.pop() << std::setw(6);*/
    std::cout << q.front() << ' ' << q.back() << '\n';
    q.front()++;
    q.back()--;
    std::cout << q.front() << ' ' << q.back() << '\n';
    return 0;
}
К сожалению, я не понял задания. А конкретно не понял, что значит
Цитата Сообщение от kruasan Посмотреть сообщение
первый элемент масива, а не отдельная переменная, используется для сохранения начала очереди и последний элемент масива, а не отдельная переменная, используется для сохранения конца очереди;
Поэтому сделал так, как вижу сам. Есть тонкое место в программе - если ввести 10 чисел(STEP), убрать первый элемент, ввести последний, то произойдет перераспределение очередей. Если так продолжать, то при каждом добавлении элемента будут перераспределяться очереди. На работоспособность программы повлиять не должно, просто будут совершаться постоянно одни и те же действия. Можно попробовать исправить это в функции push().
Да, тестировал довольно поверхностно(ввел 20 чисел, вывел все, проверил q.empty(), проверил q.front() и q.back()), так что не исключены баги. Найдете - дайте знать, поправлю.
 
Текущее время: 14:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru