![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 21.12.2010
Сообщений: 5
|
![]()
Смоделировать очередь на базе статического массива, в которой реализован такой механизм изъятия элемента из очереди: начало очереди всегда находится в первом элементе массива; при изъятии одного элемента из очереди, все остальные элементы перемещаются на одну позицию ближе к началу массива. После обработки всей заданной входной последовательности найти среднее арифметическое всех элементов очереди.
помогите пожалуйста очень надо! есть набросок осн функций (push_left, push_right, pop_left, pop_right, front_left, front_right, empty, full) и тд. [CPP]#include <stdio.h> #include <iostream> using namespace std; template<class item> class deq{ private: //Left right int left,right; //Розмір int count; //Масив елементів item *items; //Capacity - ємність int Capacity; public: //Конструктор з заданою ємністю deq(int n){ Capacity = n; items = new item[Capacity]; count = 0; left = Capacity / 2; right = left - 1; } //Деструктор ~deq(){delete[] items;} //Занесення даних в дек void push_right(item it){ if (count < Capacity){ if(right == Capacity - 1 ){ for (int i = left - 1; i < right; i++) items[i]=items[i + 1]; items[right] = it; left--; } else items[++right] = it; count++; } } //Якшо дані досягають кінця масиву, то вони //перевисуються на одну позицію від кінця void push_left(item it){ if (count < Capacity){ if(left == 0){ for (int i = right + 1; i > 0; i--) items[i] = items[i - 1]; items[left] = it; right++; } else items[--left] = it; count++; } } //Розмір деку int size(){return count;} //Перевірка чи дек порожній bool empty(){return (count == 0);} //Вершина деку item front_left(){if (!empty())return items[left];} item front_right(){if(!empty())return items[right];} //Вилучення з деку void pop_left(){ if(!empty()){ left++; count--; } } void pop_right(){ if(!empty()) right--; count--; } //Вивести вміст деку void print(){ cout << "deq:"; if(!empty()){ for(int i = left; i <= right; i++) cout << items[i] << " "; if (count == Capacity) cout << "size:full" << endl; else cout << "size:" << count << endl; } else cout << " empty" << endl; } };[/CPP] еще можно на основе этого дека сделать #include "quere.cpp" //Варіант 10 void main() { int i,a; deq<int> deq1(20); //Приклад масиву printf("arr={1,2,-3,-4,4,3,8,1,7,5,8}\n"); //Занесення даних в дек з клавіатури deq1.print(); for(i = 0; i <= 10; i++){ cout << "a="; cin >> a; if(a < 0) //Якщо число відємне і парне вилучаємо справа //інакше - зліва if(-a % 2 == 0) deq1.pop_right(); else deq1.pop_left(); else //Якщо число додатнє і парне додаємо //елемент справа інакше зліва. if(a%2 == 0) deq1.push_right(a); else deq1.push_left(a); deq1.print(); //Виведення вмісту деку } int s = deq1.size(); //розмір деку //Перенесення даних з одного кінця деку //в інший з подвоєнням for(i = 0; i < s; i++){ deq1.push_right(deq1.front_left()); deq1.push_right(deq1.front_left()); deq1.pop_left(); deq1.print(); } getchar(); getchar(); } Последний раз редактировалось Kronoz; 18.12.2011 в 21:51. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Очереди | Ame | Помощь студентам | 0 | 30.06.2011 22:15 |
Очереди | anuta90 | Помощь студентам | 3 | 09.10.2010 22:07 |
очереди | Nostalgia | Помощь студентам | 2 | 22.03.2010 17:48 |