Форум программистов, компьютерный форум CyberForum.ru

Выручайте! Нужно переделать прогу под двусвязный список.ничего не понимаю) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Заполнить матрицу, от левого верхнего угла по диагонали: вправо - вверх http://www.cyberforum.ru/cpp-beginners/thread844965.html
Помогите пожалуйста, уже второй день мучаюсь...
C++ Ввод-вывод из файла Товарищи форумчане, помогите разобраться с выводом из файла на экран. Забить в файл у меня получилось,авот вывести никак. Вот часть кода: #include <conio.h> #include <windows.h> #include <iostream> #include <stdio.h> /*Сформировать файл из целых чисел, вводимых с клавиатуры. Напечатать его. Переставить компоненты файла так, чтобы сначала шли все компоненты, являющиеся четными числами, а... http://www.cyberforum.ru/cpp-beginners/thread844932.html
Как удалить столбцы C++
Нужна программа , которая удаляет столбцы из двумерного массива , запрашивая номер столбца по одному.
C++ суммарное смещение в новый массив
Доброго всем дня! Прогуглил,но не нашёл искомого. Суть такова:имеется массив,например , из 4 элементов(заполненный). Имеется еще массив, размерностью на 1 менее, т.е. 3. И необходимо, чтобы элементы второго массива были суммой элементов, стоящих перед соответствующим индексом массива первого. ДОСТУПНЕЕ НА КАРТИНКЕ: http://s020.***********/i707/1304/52/684bb0d4fdc0.jpg
C++ Вычислить среднеарифметическое нечетных элементов массива http://www.cyberforum.ru/cpp-beginners/thread844886.html
Дан одномерный массив, состоящий из N целочисленных элементов. Заполнить массив случайными числами. Вычислить среднеарифметическое нечетных элементов массива.
C++ Вычислить произведение не нулевых элементов массива Дан одномерный массив, состоящий из N целочисленных элементов. Заполнить массив случайными числами.Вычислить произведение не нулевых элементов массива. подробнее

Показать сообщение отдельно
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
22.04.2013, 13:55     Выручайте! Нужно переделать прогу под двусвязный список.ничего не понимаю)
Цитата Сообщение от Lonter Посмотреть сообщение
Ну я еще поспрашиваю) может кто напишет еще)
Да конечно напишут. Как говорил один замечательный преподаватель: "Чем меньше вы знаете, тем ценнее я как специалист".


Чета лень мне читать тот код. Да и в тэги не обернут. Да и написан скучно как-то.

С нуля:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <stdexcept>
#include <new>
 
struct Block {
  size_t size;
  void *pointer;
  Block() : size(0), pointer(0) {}
  Block(size_t size, void *pointer) : size(size), pointer(pointer) {}
};
 
bool operator<(const Block &a, const Block &b) {
  return a.size < b.size;
}
 
class BlockList {
 public:
  BlockList() : base() {}
  virtual ~BlockList() {
    clear();
  }
  void put(const Block &block) {
    NodeBase *node = lowerBound(block.size);
    new Node(node->prev, node, block);
  }
  Block get(size_t size) {
    NodeBase *node = lowerBound(size);
    if (node != &base) {
      Block result = ((Node*)node)->data;
      delete node;
      return result;
    }
    throw std::bad_alloc();
  }
  bool isEmpty() const { return base.next == &base; }
  void clear() {
    while (!isEmpty()) {
      delete base.next;
    }
  }
  friend std::ostream &operator<<(std::ostream &stream, const BlockList &b) {
    stream << "BlockList{[";
    NodeBase *node = b.base.next;
    while (node != &(b.base)) {
      stream << ((Node*)node)->data.size;
      if (node->next != &(b.base)) {
        stream << ",";
      }
      node = node->next;
    }
    return stream << "]}";
  }
 private:
  BlockList(const BlockList&);
  BlockList &operator=(const BlockList&);
  struct NodeBase {
    NodeBase *prev, *next;
    NodeBase() : prev(this), next(this) {}
    NodeBase(NodeBase *prev, NodeBase *next) : prev(prev), next(next) {
      prev->next = next->prev = this;
    }
    virtual ~NodeBase() {
      prev->next = next;
      next->prev = prev;
    }
  };
  struct Node : public NodeBase {
    Block data;
    Node(NodeBase *prev, NodeBase *next, const Block &data)
      : NodeBase(prev, next), data(data) {}
  };
  // возвращает позицию первого блока, не меньше указанного
  NodeBase *lowerBound(size_t size) {
    NodeBase *result = base.next;
    while (result != &base && ((Node*)result)->data.size < size) {
      result = result->next;
    }
    return result;
  }
  NodeBase base;
};
 
int main(int argc, char *argv[]) {
  srand(time(0));
  
  BlockList heap;
  
  for (int i = 0; i < 15; ++i) {
    heap.put(Block(rand() % 10 + 1, 0));
  }
  
  std::cout << heap << std::endl;
  
  for (int i = 0; i < 25; ++i) {
    Block block;
    size_t size = rand() % 13;
    std::cout << "Trying to allocate " << size << " bytes: ";
    try {
      block = heap.get(size);
      std::cout << "allocated block with " << block.size << " bytes.";
      if (!(rand() % 5)) {
        std::cout << " Returning.";
        heap.put(block);
      }
    } catch (std::bad_alloc &e) {
      std::cout << "could not allocate.";
    }
    std::cout << std::endl;
  }
  
  std::cout << "Leftover:" << std::endl << heap << std::endl;
  
  return 0;
};
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru