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

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

Войти
Регистрация
Восстановить пароль
 
haseki
3 / 3 / 1
Регистрация: 02.11.2013
Сообщений: 162
#1

Односвязный список (реализация без классов) - C++

05.04.2014, 21:13. Просмотров 524. Ответов 4
Метки нет (Все метки)

Задача проста: создать список из слов, вводимых с клавиатуры, и вывести его на консоль. Всё вводит и выводит. Только откуда-то взялась "Д" в начале списка (см. вложение). Собственно, откуда она берется и как её ликвидировать?

Код:

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
#include <cstdlib>
#include <iostream>
#define M 5
using namespace std;
struct WORDS
{
       char key [25];
       
};
 
struct List
{
       WORDS words;
       List *next;
};
 
void Init (List **begin) //ГґГіГ*êöèÿ ГЁГ*èöèГ*ëèçГ*öèè Г±ГЇГЁГ±ГЄГ*
{
   *begin = new List;
   WORDS words[M];
   cout << "Введите слова: ";
   for (int i=0; i<M; i++)
     {
   
            cin >> words[i].key;
     }
   
   (*begin)->next = NULL;
   List *end = *begin;
   for (int i=0; i<M; i++)
   {
      end->next = new List;
      end = end->next;
      end->words = words[i];
      end->next = NULL;    
   }   
   
}
 
void Print (List*b)
{
  List *print = b;
  while (print)
  {
     cout << print->words.key << " -> ";
     print = print->next;      
  }    
  cout << "NULL\n";
}
int main(int argc, char *argv[])
{
    setlocale (LC_ALL, "Russian");
    List *begin = NULL;
    Init (&begin);
    Print (begin);
    system("PAUSE");
    return EXIT_SUCCESS;
}
Компилятор Dev C++.
Миниатюры
Односвязный список (реализация без классов)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2014, 21:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Односвязный список (реализация без классов) (C++):

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

Односвязный список, реализация - C++
Добрый вечер! :) Пытаюсь разобраться как работают списки. Делаю последовательный односвязный список, в который можно добавить элемент,...

реализация стека через односвязный список - C++
вот что я накалякал... должно по идее выводить первый элемент стека (ну лн в принципе пока тут и единственный), но вылетает либо 0 либо...

Реализовать иерархию классов, включающую в себя односвязный и двусвязный список - C++
Нужно реализовать иерархию классов, включающую в себя односвязный и двусвязный список. При компиляции программа выдает ошибку:&quot;Ошибка 1...

Сформировать и ввести упорядоченный односвязный список без использования list - C++
Подскажите, как сформировать и ввести упорядоченный односвязный список без использования list. Заранее спасибо!!!

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов) - C++
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как вынести методы из классов Panel и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6355 / 5919 / 1919
Регистрация: 18.12.2011
Сообщений: 15,215
Завершенные тесты: 1
05.04.2014, 21:46 #2
C++
1
2
3
4
5
6
7
8
9
10
   (*begin)->next = NULL;
   (*begin)->words=words[0]; // добавляем 1 слово
   List *end = *begin;
   for (int i=1; i<M; i++) // цикл со 2-го
   {
      end->next = new List;
      end = end->next;
      end->words = words[i];
      end->next = NULL;    
   }
haseki
3 / 3 / 1
Регистрация: 02.11.2013
Сообщений: 162
05.04.2014, 21:57  [ТС] #3
zss, большое спасибо.
Не могли бы Вы подсказать еще кое-что?

Пишу функцию добавления слова, вводимого с клавиатуры, в начало списка. Вот таким образом:
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
#include <cstdlib>
#include <iostream>
#include <string>
#define M 5
using namespace std;
struct A
{
       char key [25];
       
};
 
struct List
{
       A a;
       List *next;
};
 
void Init (List **begin) //ГґГіГ*êöèÿ ГЁГ*èöèГ*ëèçГ*öèè Г±ГЇГЁГ±ГЄГ*
{
   *begin = new List;
   A a[M];
   cout << "Ââåäèòå ñëîâГ*: ";
   for (int i=0; i<M; i++)
     {
   
            cin >> a[i].key;
     }
   
   (*begin)->next = NULL;
   (*begin)->a=a[0]; // äîáГ*âëÿåì 1 ñëîâî
   List *end = *begin;
   for (int i=1; i<M; i++) // öèêë Г±Г® 2-ГЈГ®
   {
      end->next = new List;
      end = end->next;
      end->a = a[i];
      end->next = NULL;    
   }   
   
}
 
void Print (List*b) //ГґГіГ*êöèÿ âûâîäГ* Г±ГЇГЁГ±ГЄГ* Г*Г* ГЅГЄГ°Г*Г*
{
  List *print = b;
  while (print)
  {
     cout << print->a.key << " -> ";
     print = print->next;      
  }    
  cout << "NULL\n";
}
 
void AddBegin (List **begin, A&a) //äîáГ*âëåГ*ГЁГҐ ýëåìåГ*ГІГ* Гў Г*Г*Г·Г*ëî Г±ГЇГЁГ±ГЄГ*
{
   List *t = new List;
   t->a = a;
   t->next = *begin;
   *begin = t;      
}
 
 
int main(int argc, char *argv[])
{
    setlocale (LC_ALL, "Russian");
    A b[25];
    cout << "Ââåäèòå ñëîâî, êîòîðîå õîòèòå äîáГ*ГўГЁГІГј Гў Г*Г*Г·Г*ëî Г±ГЇГЁГ±ГЄГ*: ";
    cin >> b;
    List *begin = NULL;
    Init (&begin);
    Print (begin);
    AddBegin (&begin, b);
    Print (begin);
    system("PAUSE");
    return EXIT_SUCCESS;
}
Не компилируется, стало быть, пишу неправильным образом.
recoder
130 / 130 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
05.04.2014, 22:04 #4
Думаю, понятно что нужно сделать.
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
#include <cstdlib>
#include <iostream>
#include <string>
#define M 5
using namespace std;
struct A
{
       char key [25];
       
};
 
struct List
{
       A a;
       List *next;
};
 
void Init (List **begin) //функция инициализации списка
{
   *begin = new List;
   A a[M];
   cout << "Введите слова: ";
   for (int i=0; i<M; i++)
     {
   
            cin >> a[i].key;
     }
   
   (*begin)->next = NULL;
   (*begin)->a=a[0]; // добавляем 1 слово
   List *end = *begin;
   for (int i=1; i<M; i++) // цикл со 2-го
   {
      end->next = new List;
      end = end->next;
      end->a = a[i];
      end->next = NULL;    
   }   
   
}
 
void Print (List*b) //функция вывода списка на экран
{
  List *print = b;
  while (print)
  {
     cout << print->a.key << " -> ";
     print = print->next;      
  }    
  cout << "NULL\n";
}
 
void AddBegin (List **begin, A &a) //добавление элемента в начало списка
{
   List *t = new List;
   t->a = a;
   t->next = *begin;
   *begin = t;      
}
 
 
int main(int argc, char *argv[])
{
    setlocale (LC_ALL, "Russian");
    A b;
    cout << "Введите слово, которое хотите добавить в начало списка: ";
    cin >> b.key;
    List *begin = NULL;
    Init (&begin);
    Print (begin);
    AddBegin (&begin, b);
    Print (begin);
    system("PAUSE");
    return EXIT_SUCCESS;
}
haseki
3 / 3 / 1
Регистрация: 02.11.2013
Сообщений: 162
05.04.2014, 22:24  [ТС] #5
recoder, всё поняла, спасибо.

Добавлено через 18 минут
Попытки вставить слово в середину списка и удалить слово, введенное с клавиатуры, тоже не увенчались успехом (функции Insert и Delete)

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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <cstdlib>
#include <iostream>
#include <string>
#define M 5
using namespace std;
struct A
{
       char key [25];
       
};
 
struct List
{
       A a;
       List *next;
};
 
void Init (List **begin) //ГґГіГ*êöèÿ ГЁГ*èöèГ*ëèçГ*öèè Г±ГЇГЁГ±ГЄГ*
{
   *begin = new List;
   A a[M];
   cout << "Ââåäèòå ñëîâГ*: ";
   for (int i=0; i<M; i++)
     {
   
            cin >> a[i].key;
     }
   
   (*begin)->next = NULL;
   (*begin)->a=a[0]; // äîáГ*âëÿåì 1 ñëîâî
   List *end = *begin;
   for (int i=1; i<M; i++) // öèêë Г±Г® 2-ГЈГ®
   {
      end->next = new List;
      end = end->next;
      end->a = a[i];
      end->next = NULL;    
   }   
   
}
 
void Print (List*b) //ГґГіГ*êöèÿ âûâîäГ* Г±ГЇГЁГ±ГЄГ* Г*Г* ГЅГЄГ°Г*Г*
{
  List *print = b;
  while (print)
  {
     cout << print->a.key << " -> ";
     print = print->next;      
  }    
  cout << "NULL\n";
}
 
void AddBegin (List **begin, A&a) //äîáГ*âëåГ*ГЁГҐ ýëåìåГ*ГІГ* Гў Г*Г*Г·Г*ëî Г±ГЇГЁГ±ГЄГ*
{
   List *t = new List;
   t->a = a;
   t->next = *begin;
   *begin = t;      
}
 
void Insert (List **begin, const A&a) //ГўГ±ГІГ*ГўГЄГ* Гў ëþáîå ìåñòî Г±ГЇГЁГ±ГЄГ*
{
        List *ins = new List;
        ins->a = a;
        if (*begin == NULL)
        { 
                   ins->next = NULL;
                   *begin = ins;
                   return;
        }  
        List *q = *begin; //ññûëêГ* Г*Г* Г*Г*Г·Г*ëî Г±ГЇГЁГ±ГЄГ*
        if (q->a.key >= ins->a.key)
        {
                     ins->next = q;
                     *begin = ins;
                     return;
                         
        }
        List *t1 = q->next;
        while (t1)
        {
              if (q->a.key > ins->a.key && ins->a.key <= t1->a.key)
              {
                           q->next = ins;
                           ins->next = t1;
                           return;
              }
              q = t1;
              t1 = t1->next;
              
        }
        
        
}
 
void Delete (List **begin, const A&a) //ГіГ¤Г*ëèòü ýëåìåГ*ГІ Г± Г§Г*Г¤Г*Г*Г*ûì Г§Г*Г*Г·ГҐГ*ГЁГҐГ¬
{
     if (*begin = NULL)
     {
                return;
     }
     List *t = *begin;
     if(t->a.key == a.key)
     {
                 *begin = t->next;
                 delete t;
                 return;
     }
     List *t1 = t->next;
     while (t1)
     {
           if (t1-> a.key == a.key)
           {
                    t->next = t1->next;
                    delete t1;
                    return;
           }
           t = t1;
           t1 = t1->next;
     }
}
 
 
 
int main(int argc, char *argv[])
{
    setlocale (LC_ALL, "Russian");
    A add_word, add_ins, del;
    List *begin = NULL;
    Init (&begin);
    Print (begin);
    cout << "Ââåäèòå ñëîâî, êîòîðîå õîòèòå äîáГ*ГўГЁГІГј Гў Г*Г*Г·Г*ëî Г±ГЇГЁГ±ГЄГ*: ";
    cin >> add_word.key;
    AddBegin (&begin, add_word);
    Print (begin);
    cout << "Ââåäèòå ñëîâî, êîòîðîå õîòèòå ГўГ±ГІГ*ГўГЁГІГј Гў ñïèñîê: ";
    cin >> add_ins.key;
    Insert (&begin, add_ins);
    Print (begin);
    cout << "Ââåäèòå ñëîâî, êîòîðîå õîòèòå ГіГ¤Г*ëèòü: ";
    cin >> del.key;
    Delete (&begin, del);
    Print (begin);
    system("PAUSE");
    return EXIT_SUCCESS;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2014, 22:24
Привет! Вот еще темы с ответами:

Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс - C++
Доброго времени суток! Осваивая UML, решил реализовать отношение двунаправленной ассоциации по диаграмме: У одного владельца...

Сформировать список из 10 книг, используя динамическую структуру данных односвязный список - C++
друзья спасайте Сформировать список из 10 книг, используя динамическую структуру данных односвязный список С++

Создать двусвязный список групп факультета, где каждая группа представляет собой односвязный список студентов - C++
Задание: создайте двусвязный список групп факультета. Каждая группа представляет собой односвязный список студентов. Помогите пожалуйста,...

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


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

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

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