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

Задачка на динамический список. Помогите дорешать - C++

Восстановить пароль Регистрация
 
artem0711
 Аватар для artem0711
7 / 7 / 1
Регистрация: 25.08.2010
Сообщений: 62
22.12.2011, 08:37     Задачка на динамический список. Помогите дорешать #1
Создать список, заполнив его n числами вида: 5, 10, 15, 20, 25, ...
С помощью функции вывести список на экран.
Вставить значение x, введённое с клавиатуры, таким образом, чтобы не нарушилась упорядоченность списка.

Список создал, смог организовать вставку значения x только в середину списка. Если вводить число, которое должно вставать в начало или в конец списка - программа вылетает с ошибкой. Вот код:

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
#include "stdafx.h"
#include <conio.h>
#include <iostream>
 
using namespace std;
 
struct List
{
    int data;
    List *next;
};
 
typedef List* LPtr;
 
LPtr Form(int n)
{
    LPtr H = NULL;
    H = new List;
    H->data = 5;
    H->next = NULL;
    LPtr tmp = H;
    for (int i=2; i<=n; i++)
    {
        tmp->next = new List;
        tmp = tmp->next;
        tmp->data = 5*i;
        tmp->next = NULL;
    }
    return H;
}
 
void Show(LPtr H)
{
    LPtr tmp = H;
    while (tmp)
    {
        cout<<tmp->data<<" ";
        tmp = tmp->next;
    }
}
 
LPtr Search(LPtr H, int x)
{
    LPtr tmp = H;
    while (tmp && tmp->data>x || tmp->next->data<=x)
        tmp = tmp->next;
    return tmp;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{   
    int x;
    LPtr L = NULL, tmp, t;
    L = Form(20);
    Show(L);
    cout<<"\nEnter digital: "; cin>>x;
    tmp = Search(L, x);
    t = new List;
    t->data = x;
    t->next = tmp->next;
    tmp->next = t;
    Show(L);
    delete L;
    delete tmp;
    delete t;
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2011, 08:37     Задачка на динамический список. Помогите дорешать
Посмотрите здесь:

динамический список C++
Динамический список C++
Динамический список C++
C++ Динамический список
Динамический список C++
Динамический список C++
C++ Динамический список
C++ Динамический список

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
22.12.2011, 14:52     Задачка на динамический список. Помогите дорешать #2
вот по простому.
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
#include <iostream>
using namespace std;
 
struct slist {
   int data;
   slist* next;
};
slist* add(slist* lst, int data);
slist* insert_s(slist* lst, int data);
slist* clear(slist* lst);
void   print(ostream& os, slist* lst);
 
int main(void)
{
    slist* lst = NULL;
    lst = add(lst, 5);
    lst = add(lst, 10);
    lst = add(lst, 15);
    lst = add(lst, 20);
    lst = add(lst, 25);
/*  // тест
    lst = insert_s(lst, 12);
    lst = insert_s(lst, 100);
    lst = insert_s(lst, -700);
*/
    int x = 0; 
    cout << "enter number: ";
    cin >> x;
    lst = insert_s(lst, x);
    print(cout, lst);
    lst = clear(lst);
    return 0;
}
 
// добавление по - FIFO
slist* add(slist* lst, int data) {
   slist* n = new slist();
   n->data  = data;
   if(! lst)
        lst = n;
   else 
        n->next = lst->next;
        lst->next = n;
   return n;
}
 
slist* insert_s(slist* lst, int data) {
    slist* tl, *n, *it = lst->next;
    tl = NULL;
    do {
          if(it->data <= data)
              tl = it;
          else 
              break;
          it = it->next;
     } while(it != lst->next);
 
     if(tl == lst) // вставить в конец списка
         return add(lst, data);
 
    n = new slist();
    n->data = data;
    if(tl) {  // вставить где-то в списке
        n->next  = it;
        tl->next = n;
    } else { // вставить в голову списка
        n->next = lst->next;
        lst->next = n;
    }
    return lst;
}
 
void print(ostream& os, slist* lst) {
   slist* it = lst->next;
   do {
        os << it->data << endl;
        it = it->next;
   } while(it != lst->next);
}
 
slist* clear(slist* lst) {
   slist* tmp;
   while(lst != lst->next) {
        tmp = lst->next;
        lst->next = tmp->next;
        delete tmp;
        tmp = NULL;
   }
   delete lst;
   lst = NULL;
   return lst;
}
Yandex
Объявления
22.12.2011, 14:52     Задачка на динамический список. Помогите дорешать
Ответ Создать тему
Опции темы

Текущее время: 10:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru