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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как реализовать ручной ввод данных? 
:(
    Опции темы
maxim43k
  Дата 7.9.2011, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как реализовать ручной ввод в данной программе? (Задание: вставить заданный пользователем элемент Е до и после элемента с минимальным ключом в заданном пользователем односвязном списке.)
Код

#include <iostream.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
 
typedef int Tp;

 struct NodeBase
{
 NodeBase() : next(this) {}
 NodeBase(NodeBase *next_node) : next(next_node) {}
 NodeBase *next;
};

 struct Node : NodeBase
{
 Tp value;
 Node(NodeBase *after, Tp node_value)
 : NodeBase(after->next), value(node_value)
    {
     after->next = this;
    }
};

 class SpecialList
{public:
    typedef Node NodeType;
    SpecialList() : first_(), least_(&first_) {}
    ~SpecialList()
      {
       clear();
      }

    void insertBeforeAndAfterLeast(Tp value)
       {
    NodeType *node = new NodeType(least_, value);
    if ((least_ == &first_) || (((NodeType*)least_)->value >= value))
    least_ = node;
    node = new NodeType(previousTo(least_), value);
       }

    void pushBack(Tp value)
       {
    NodeType *node = new NodeType(lastNode(), value);
    if ((least_ == &first_) || (((NodeType*)least_)->value >= value))
    least_ = node;
       }

    void clear()
       {
    NodeBase *node = first_.next;
    while (node != &first_)
      {
       first_.next = node->next;
       delete node;
       node = first_.next;
      }
    least_ = &first_;
       }

    friend ostream &operator<<(ostream &stream, const SpecialList &list)
       {
    NodeBase *node = list.first_.next;
    while (node != &(list.first_))
      {
       stream << ((NodeType*)node)->value << " ";
       node = node->next;
      }
    return stream;
       }

 private:
    NodeBase *previousTo(NodeBase *sourceNode)
       {
    NodeBase *previous = &first_;
    NodeBase *current = first_.next;
    while (current != sourceNode)
      {
       previous = current;
       current = current->next;
      }
    return previous;
       }

    NodeBase *lastNode()
       {
    NodeBase *node = first_.next;
    while (node->next != &first_)
      {
       node = node->next;
      }
    return node;
       }
    NodeBase first_;
    NodeBase *least_;
};

 void main()
{
 clrscr();
 srand(time(NULL));
 SpecialList list;
 for (int i = 0; i < 10; ++i)
   {
    int value = rand() % 10;
    cout << value << " ";
    list.pushBack(value);
   }
 cout << endl << list << endl;

 int value = 100 + rand() % 100;
 list.insertBeforeAndAfterLeast(value);
 cout << endl << list << endl;
}

PM MAIL   Вверх
volatile
Дата 8.9.2011, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Цитата(maxim43k @  7.9.2011,  19:55 Найти цитируемый пост)
Как реализовать ручной ввод в данной программе? 


Цитата(maxim43k @  7.9.2011,  19:55 Найти цитируемый пост)
 int value = 100 + rand() % 100;

заменить на
Код

int value;
std::cout << "Enter a number, please:";
std::cin >> value;

зы: в логику работы самого контейнера не вникал, надеюсь что вы его взяли из проверенных источников. smile 

Это сообщение отредактировал(а) volatile - 8.9.2011, 00:40
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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