Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] "Динамическая очередь" 
:(
    Опции темы
arsikjkeee
Дата 10.12.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



В HIDER-файле

Код

class List {static List* top;
int info;
List *link;
public: List ( int i)
{   link=top; //подключение списка к существующему
info = i; // заполнение информационной части списка 
top = this; // на вершине очереди - текущий список
// вывод сообщения о создании элемента очереди
char istr[10],str[40];//временные строки для MessageBox
_ltoa( this->info, istr, 10 );//функция, преобразующая
                                                                  //десятичное целое в строку
strcpy(str,"Создается элемент списка :");//формирование начала строки
strcat(str,istr);
MessageBox(0,str,"Создание",MB_OK); };//диалог MessageBox
~List (){
List *p;
char istr[10],str[40];
_ltoa( this->info, istr, 10 );
if(top==this)top= link;// элемент удаляется с вершины
else {
    for(p=top;p;p=p->link)if(p->link == this)break;
     if(p) p-> link = link;
     else                {
 MessageBox(0,"Элемент не найден !",””, MB_OK);
 exit(1);              } }
//вывод сообщения об удалении элемента из очереди
strcpy(str,"Удаляется элемент списка :");
strcat(str,istr);
MessageBox(0,str,"Удаление",MB_OK); };
static void show();// демонстрация содержимого очереди
static List *gettop(){return top;}; };

В CPP-файле

#include<stdlib.h>
#include<string.h>
#pragma hdrstop
#include "stat.h"
#pragma resource "*.dfm"
TForm1 *TForm1;
List* List::top=0;//top должен быть объявлен как глобальный
int element; //переменная, используемая для заполнения списков
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}
void List::show()
{    List *p; char istr[10],str[40];// просмотр списков
if(!top)MessageBox(0,"Список пуст","Нет элементов",MB_OK);
for(p=top;p;p=p->link)
{ _ltoa( p->info, istr, 10 );
strcpy(str,"Элемент списка :");
strcat(str,istr);
MessageBox(0,str,"Просмотр",MB_OK);
}     }
void __fastcall TForm1::Button1Click(TObject *Sender)
{ Visible=false;// скрываем форму на время MessageBox
  new List(++element);// добавляем в очередь элемент
  Visible=true;// восстанавливаем статус формы
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{ List *p; // вспомогательный указатель
  Visible=false;
  p = List::gettop();
  if( p ) delete p; //удаление элемента с вершины очереди
  Visible=true;}
void __fastcall TForm1::Button3Click(TObject *Sender)
{ Visible=false;
  List::show();
  Visible=true;}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{   //освобождение памяти при закрытии формы
List* p;// вспомогательный указатель
Visible=false;
while( p=List::gettop())delete p;//цикл по удалению остав-
 }                                                                         шихся списков из очереди



ЗАДАНИЕ: Добавьте в систему функцию увеличения значений элементов очереди на заданную величину 


 ! 
Rodman
Модератор: Используйте подсветку кода!



Это сообщение отредактировал(а) Rodman - 15.12.2008, 16:25
PM MAIL   Вверх
radow
Дата 10.12.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Что такое top, link. 
PM MAIL   Вверх
radow
Дата 10.12.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Реализация очереди в виде двухсвязного списка
hider файл
Код

template <class T>
struct ElemTurn{
    T data;
    ElemTurn<T> *IndexNext;
    ElemTurn<T> *IndexBack;
    ElemTurn(T d):data(d), IndexNext(0), IndexBack(0){}
    ElemTurn(){}
};

template <class T>
class Turn
{
    int SizeTurn;
    ElemTurn<T> *IndexHead, *IndexTail;
public:
    Turn();
    Turn(const Turn<T>&);
    ~Turn();
public:
        bool DelTail();
        void NewData(T NewData);//ф-ция увеличения данных очереди


cpp файл
Код

template <class T>
istream & operator>>(istream&, Turn<T>&);

template <class T>
Turn<T>::Turn():IndexHead(NULL),IndexTail(NULL),SizeTurn(0)
{
}

template <class T>
Turn<T>::Turn(const Turn<T>& ob)
{
    ElemTurn<T> *p = ob.IndexHead;
    ElemTurn<T> *pOld = new ElemTurn<T>(p->data);
    this->SizeTurn=0;
    this->IndexHead=pOld;
    this->IndexHead->IndexBack=NULL;
    p=p->IndexNext;
    while(p)
    {    
        ElemTurn<T> *pNew = new ElemTurn<T>(p->data);
        pOld->IndexNext=pNew;
        pNew->IndexBack=pOld;
        pOld=pNew;
        p=p->IndexNext;
    }
    this->SizeTurn=ob.SizeTurn;
    this->IndexTail=pOld;
    this->IndexTail->IndexNext=NULL;
}

template <class T>
Turn<T>::~Turn(void)
{
    while(this->DelTail());
}
template <class T>
bool Turn<T>::DelTail()
{
    ElemTurn<T> *p, *pBack;
    if(this->SizeTurn==0)
    {
        return false;
    }
    p=this->IndexTail;
    pBack = p->IndexBack;
    this->IndexTail=pBack;
    if(this->IndexTail)
    {
        this->IndexTail->IndexNext=NULL;
    }
    this->SizeTurn--;
    delete[]p;
    return true;
}
[color=darkred]  ф-ция увеличения данных очереди
template <class T>
void Turn<T>::NewData(T NewData)
{
     ElemTurn *p = this->IndexHead;
    while(p)
    {
        p->data+=NewData;
        p=p->IndexNext;
    }
}[/color]


PM MAIL   Вверх
Earnest
Дата 10.12.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 2
Всего: 183



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
...
PM   Вверх
arsikjkeee
Дата 10.12.2008, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



Цитата(radow @ 10.12.2008,  17:37)
Реализация очереди в виде двухсвязного списка
hider файл
Код

template <class T>
struct ElemTurn{
    T data;
    ElemTurn<T> *IndexNext;
    ElemTurn<T> *IndexBack;
    ElemTurn(T d):data(d), IndexNext(0), IndexBack(0){}
    ElemTurn(){}
};

template <class T>
class Turn
{
    int SizeTurn;
    ElemTurn<T> *IndexHead, *IndexTail;
public:
    Turn();
    Turn(const Turn<T>&);
    ~Turn();
public:
        bool DelTail();
        void NewData(T NewData);//ф-ция увеличения данных очереди


cpp файл
Код

template <class T>
istream & operator>>(istream&, Turn<T>&);

template <class T>
Turn<T>::Turn():IndexHead(NULL),IndexTail(NULL),SizeTurn(0)
{
}

template <class T>
Turn<T>::Turn(const Turn<T>& ob)
{
    ElemTurn<T> *p = ob.IndexHead;
    ElemTurn<T> *pOld = new ElemTurn<T>(p->data);
    this->SizeTurn=0;
    this->IndexHead=pOld;
    this->IndexHead->IndexBack=NULL;
    p=p->IndexNext;
    while(p)
    {    
        ElemTurn<T> *pNew = new ElemTurn<T>(p->data);
        pOld->IndexNext=pNew;
        pNew->IndexBack=pOld;
        pOld=pNew;
        p=p->IndexNext;
    }
    this->SizeTurn=ob.SizeTurn;
    this->IndexTail=pOld;
    this->IndexTail->IndexNext=NULL;
}

template <class T>
Turn<T>::~Turn(void)
{
    while(this->DelTail());
}
template <class T>
bool Turn<T>::DelTail()
{
    ElemTurn<T> *p, *pBack;
    if(this->SizeTurn==0)
    {
        return false;
    }
    p=this->IndexTail;
    pBack = p->IndexBack;
    this->IndexTail=pBack;
    if(this->IndexTail)
    {
        this->IndexTail->IndexNext=NULL;
    }
    this->SizeTurn--;
    delete[]p;
    return true;
}
[color=darkred]  ф-ция увеличения данных очереди
template <class T>
void Turn<T>::NewData(T NewData)
{
     ElemTurn *p = this->IndexHead;
    while(p)
    {
        p->data+=NewData;
        p=p->IndexNext;
    }
}[/color]


спасибо....., но зачем мне реализация очереди в виде двухсвязного списка???
мне нужно увеличение очереди на заданное значение....заранее спасибо)
PM MAIL   Вверх
radow
Дата 12.12.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



очередь в виде чего реализована(массив, список(односвязный, двухсвязный))
PM MAIL   Вверх
arsikjkeee
Дата 15.12.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



я без понятия вообще  smile 
PM MAIL   Вверх
arsikjkeee
Дата 15.12.2008, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



модератор ты меня заебал уже
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.