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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Lonter
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
#1

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

22.04.2013, 10:56. Просмотров 907. Ответов 23
Метки нет (Все метки)

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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <iostream>
#include <conio.h> 
struct Node
{
    int memSize;
    Node *Next;
};
Node *BegList;
using namespace std;
void MakeList(int *Sz, int n)
{
    Node *Curr,*Prev;
    int i;
    BegList=new Node;
    BegList->Next =NULL;
    BegList->memSize=Sz[0];
    cout << Sz[0] << endl;
    Prev=BegList;
    for (i=1; i<n; i++)
    {
        Curr=new Node;
        Prev->Next =Curr;
        Curr->Next =NULL;
        Curr->memSize=Sz[i];
        cout << Sz[i] << endl;
        Prev=Curr;
    }
};
 
long searchBlock(long sz)
{
    Node *Curr, *Prev, *Nxt;
    long szBlock;
    Curr=BegList;
    Prev=NULL;
    while(1)
    {
        if (Curr == NULL) 
        {
            szBlock=-1;
            break;
        }
        if (Curr->memSize >= sz) // Нашли...
        {
           
                   Nxt=Curr->Next;
                   szBlock=Curr->memSize;
           
                  if (Curr == BegList) // Блок первый
           {
               if (Nxt == NULL) // и единственный
               {
                   delete BegList;
                   cout << "Now list is empty" << endl;
                   break;
               }
               else
               {
                   delete BegList;
                   BegList=Nxt;
                   break;
               }
 
           }
           else // блок не первый
           {
               if (Nxt == NULL)  // последний
               {
                   delete Curr;
                   Prev->Next=NULL;
                   break;
               }
               else
               {
                   delete Curr;
                   Prev->Next=Nxt;
                   break;
               }
           }
           
        }
        Prev=Curr;
        Curr=Curr->Next;
    }
    return  szBlock;
};
void DeleteList()
{
    Node *Curr,*Next;
    Curr=BegList;
    while (1)
    {
      Next=Curr->Next;
      delete Curr;
      if (Next == NULL) break;
      Curr=Next;
    }
};
   
// Распечатать список
 
void PrintList()
{
    Node *Curr,*Next;
    Curr=BegList;
    while (1)
    {
      Next=Curr->Next;
      cout << Curr->memSize << endl; 
      if (Next == NULL) break;
      Curr=Next;
    }
};
           
int main(int argc, char* argv[])
{
    int szB[]={100,200,300,400,500};
    long bs,bq;
    cout << "Initial List:" << endl;
    MakeList (szB,sizeof(szB)/sizeof(int));
    cout << endl << "Enter block size: ";
    cin >> bs;
    if ((bq=searchBlock(bs)) > 0)
        cout << "Block (" << bq << " ) is found" << endl;
    else
        cout << "Block not found!" << endl;
    cout << endl;
    PrintList();
    DeleteList();
    getch();
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2013, 10:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выручайте! Нужно переделать прогу под двусвязный список.ничего не понимаю) (C++):

Как переделать эту прогу в шаблон классов "Двусвязный список" произвольных элементов - C++
#include &lt;iostream.h&gt; #include &lt;stdlib.h&gt;2 #include &lt;conio.h&gt; using namespace std; struct Element { public: double...

Переделать двусвязный список в двусвязный кольцевой - C++
Здравствуйте, у меня єсть двусвязный список однако он не кольцевой! как это запрограммировать? и второй вопрос как обеспечить вставку...

Переделать на Двусвязный список - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string.h&gt; #include &lt;iomanip&gt; #include &lt;stdlib.h&gt; using namespace std; struct...

Как переделать двусвязный список в циклический c++ - C++
Как переделать двусвязный список в циклический c++

Переделать программу с односвязного на двусвязный список - C++
Помогите переделать програмку с односв'язного на двосв'язний список. Условие задачи было такое: реализовать двосв'язный список, считать...

Возможно ли как-то переделать односвязный список в двусвязный? - C++
Собственно вопрос в названии. Возможно ли переделать односвязный список в двусвязный? Или проще написать программу наново? Вот сама...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
22.04.2013, 13:39 #16
Lonter, у тебя изменяться функция добавления, удаления, вывода, смотри, когда ты добавляешь элемент, ты указываешь кто сзади и кто спереди.
0
Lonter
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
22.04.2013, 13:41  [ТС] #17
Ну я еще поспрашиваю) может кто напишет еще)
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
22.04.2013, 13:55 #18
Цитата Сообщение от 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;
};
0
Lonter
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
22.04.2013, 14:06  [ТС] #19
Спасибо, надо только разобраться )))

Добавлено через 1 минуту
а она разве в двусвязных написана?
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
22.04.2013, 14:41 #20
Цитата Сообщение от Lonter Посмотреть сообщение
а она разве в двусвязных написана?
Да вы разбирайтесь, разбирайтесь.
0
Lonter
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
22.04.2013, 15:34  [ТС] #21
Если честно вообще ничего непонятно)))
0
Qazan
211 / 59 / 9
Регистрация: 30.04.2013
Сообщений: 797
Записей в блоге: 10
23.05.2013, 07:48 #22
Я так понимаю ты хочешь чтобы тебе сделали за тебя ?
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
23.05.2013, 08:29 #23
Цитата Сообщение от Qazan Посмотреть сообщение
Я так понимаю ты хочешь чтобы тебе сделали за тебя ?
Уже все сделано.

Цитата Сообщение от Lonter Посмотреть сообщение
Если честно вообще ничего непонятно)))
Сделать за кого-то можно, а вот понять за кого-то не выйдет.
0
Lonter
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
23.05.2013, 09:44  [ТС] #24
Да я уже давно все сам сделал и сдал)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2013, 09:44
Привет! Вот еще темы с ответами:

Нужно переделать прогу! - C++
Нужно переписать код, чтобы не было меток)))) #include&lt;math.h&gt; #include&lt;stdio.h&gt; #include&lt;alloc.h&gt; #include&lt;conio.h&gt; ...

Под С++ нужно переделать - C++
while pos(' ',s)&gt;0 do{пока есть пробелы} begin s1:=copy(s,1,pos(' ',s)-1);{копируем первое слово} k:=0; for i:=1 to...

Нужно переделать программу с С++ под С - C++
Доброе утро форумчани! Есть программа написанная на С++ #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; int...

Однонаправленный список: переделать код под консоль - C++
Имеется три файла, помогите пожалуйста, мне нужно эту задачу реализовать в Консольном приложении в Визуал студио 2008, Чтоб на консоль...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.05.2013, 09:44
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru