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

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

Восстановить пароль Регистрация
 
haseki
 Аватар для haseki
2 / 2 / 1
Регистрация: 02.11.2013
Сообщений: 151
05.04.2014, 21:13     Односвязный список (реализация без классов) #1
Задача проста: создать список из слов, вводимых с клавиатуры, и вывести его на консоль. Всё вводит и выводит. Только откуда-то взялась "Д" в начале списка (см. вложение). Собственно, откуда она берется и как её ликвидировать?

Код:

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++
Сформировать и ввести упорядоченный односвязный список без использования list C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 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
 Аватар для haseki
2 / 2 / 1
Регистрация: 02.11.2013
Сообщений: 151
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
 Аватар для recoder
129 / 129 / 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
 Аватар для haseki
2 / 2 / 1
Регистрация: 02.11.2013
Сообщений: 151
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;
}
Yandex
Объявления
05.04.2014, 22:24     Односвязный список (реализация без классов)
Ответ Создать тему
Опции темы

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