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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2013, 21:23   #1
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию как реализовывать очередь в с++ ?

собственно вопрос в чем
нужно реализовать класс очередь и перегрузить операторы
_
operator<< вывод (естественно)
operator+ добавить элемент в очередь
bool() проверка очереди на пустоту
operator-- извлечь элемент

_

Код:
#include "stdafx.h"
#include <cstdio>
#include <iostream>

class Queue
{
protected:
	
  static const int MAX_SIZE = 100;
 int * QueueArray;
 int Start;
 int End;
public:
	 Queue()
	 { 
		 QueueArray = new int[MAX_SIZE];
		 
	 }
	 friend  std::ostream &operator<<(std::ostream &Stream ,Queue &a)
	 {    for (int Current = a.Start+1;Current<a.End+1;Current++)
		 {
		   Stream<<" "<<  a.QueueArray[i];
		 }
	 
	 }
	  bool inanity()
	 {    if(Start == End)
		 {
			 std::cout<< "очередь пуста" << std::endl;
			 return 1;
	 }else {
		 std::cout<<"очередь заполнена "<<std::endl;
		
		 return 0;}}
	  
};
мне непонятно как реализуется очередь
proef вне форума Ответить с цитированием
Старый 16.11.2013, 21:55   #2
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию

так наверно будет добавление элемента
Код:
 Queue operator+(int number)
	  { if(Start ==MAX_SIZE)
			  {
			   std::cout<<"очередь пустая";
			  }

	  this->QueueArray[Start] = number;
	  Start++;
	  }
proef вне форума Ответить с цитированием
Старый 17.11.2013, 03:00   #3
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Рекомендую ресурс Интуит - на нем есть очень интересный курс Алгоритмы и структуры данных.
Вот лекция из данного курса с примером про очередь. Конечно, там реализовано на структурах, ну я думаю, Вы сможете адаптировать функции под класс.

http://www.intuit.ru/studies/courses...re/6556?page=2

Вы стеки проходили? Простая очередь - это стек "наоборот".
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Blondy; 17.11.2013 в 03:06.
Blondy вне форума Ответить с цитированием
Старый 17.11.2013, 18:03   #4
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию

сделал с помощью динамических списков
но оно не работает
Код:
// ConsoleApplication85.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <cstdio>
#include <iostream>
#include <conio.h>
#include <locale>

typedef struct listItem
{   
	int Data;
	listItem* sled;
}
QueueElement;
class Queue
{
private:
	QueueElement* Start;
	QueueElement* End;
	unsigned int CountQueue;
	void AddTolist(QueueElement *&Start,QueueElement *&End,QueueElement *Temp)
	{
	
		if (Start)
		{
		End->sled = Temp;
		End = Temp;
		}
		else 
		{
		  Start = End = Temp;
	    };
	
	}
public:
//по Умолчанию
	friend std::ostream &operator<<(std::ostream &Stream,const Queue &q)
	{
	    QueueElement *tmp= q.Start;
        while(tmp)
		{
        
		Stream<<tmp->Data<<" "<<std::endl;
		
		tmp = tmp->sled;
		}
		return Stream;
	}
    Queue():CountQueue(5)
	{
		std::cout<<"количество элементов"<<std::endl;
		std::cin>>CountQueue;
	 Start = End = NULL;
	 QueueElement* temp;

	 
	for (int i=0;i<CountQueue;i++)
	{
     temp = new QueueElement;
	std::cin>>temp->Data;
    temp->sled = NULL;
	AddTolist(Start,End,temp);
    }

	
	}
	~Queue()
	{QueueElement *tmp = this->Start;
		while(Start)
		{ tmp = Start;
		Start = Start->sled;
		delete tmp;
		 
		}
	
	}
	Queue &operator+(int Number)
	{ 
		std::cout<<" добавили элемент "<<Number<<std::endl;
	QueueElement* tmp =new QueueElement;
	tmp->Data = Number;
	tmp->sled = NULL;
	AddTolist(Start,End,tmp);
	CountQueue++;
    return *this;
	}
    unsigned int Lenght()
	{
	return CountQueue;
	}
	bool empty() const{return Start ==NULL;}
	
	Queue &operator--()
	{
		std::cout<<"извлекли элемент  : "<<Start->Data<<std::endl;
	QueueElement*tmp = new QueueElement;
	tmp = Start;
	Start = Start->sled;
   delete[] tmp;
	CountQueue--;
	}
};
	int main(int ArgCount,char**Arguments)
	{setlocale(2,"rus");

	Queue* Q = new Queue();

	Q+5;

	std::cout<<Q<<std::endl;

	Q--;
	std::cout<<Q<<std::endl;

	getchar();
	getchar();
	return 0;
	}
Изображения
Тип файла: jpg Безымянный.jpg (14.7 Кб, 131 просмотров)
proef вне форума Ответить с цитированием
Старый 17.11.2013, 18:05   #5
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию

выдаёт какой -то адрес (не уверен)
proef вне форума Ответить с цитированием
Старый 17.11.2013, 18:35   #6
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию

почему - то даже не выводит строки "элемент извлечен","добавили элемент"
proef вне форума Ответить с цитированием
Старый 17.11.2013, 18:40   #7
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Если не выводит, значит не выполняет эти строки. Программа идёт иными путями.
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 17.11.2013, 20:50   #8
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию

Цитата:
Сообщение от Fenex Посмотреть сообщение
Если не выводит, значит не выполняет эти строки. Программа идёт иными путями.
какими другими ? что-то я не пойму
proef вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм Штрассена (как исправить?) :confused: Dalokoshka Помощь студентам 0 08.06.2011 01:00
:confused:Не устанавливается компонент TMS!!!:confused: Virus25 Компоненты Delphi 4 20.09.2010 13:15
Стоит ли реализовывать данную идею? Kn793 Свободное общение 7 06.09.2010 07:19
Нужно ли в абстрактном классе реализовывать методы? psihadelic Общие вопросы C/C++ 1 22.04.2010 17:19
как установить С++ и не уронить Wind-у?:confused: Bogood Общие вопросы C/C++ 4 12.10.2008 22:09