Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2011, 21:34   #1
Kronoz
 
Регистрация: 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.
Kronoz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очереди Ame Помощь студентам 0 30.06.2011 22:15
Очереди anuta90 Помощь студентам 3 09.10.2010 22:07
очереди Nostalgia Помощь студентам 2 22.03.2010 17:48