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

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

Войти
Регистрация
Восстановить пароль
 
nelson1992
3 / 3 / 0
Регистрация: 21.10.2009
Сообщений: 77
#1

Списки - C++

16.12.2010, 17:10. Просмотров 402. Ответов 0
Метки нет (Все метки)

Вот есть задание...всё вроде бы сделал,но работает не правильно...не правильно добавляет элементы...помогите разобраться...

Записи в линейном списке содержат ключевое поле типа int. Сформировать однонаправленный список. Удалить из него элемент после элемента с заданным номером, добавить элемент после элемента с заданным номером;

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
#include<iostream>
using namespace std;
struct node
{
  int  elem;
  node *sled;
};
 class Spisok {
   private:
     node *phead, *Res;
   public:
     Spisok() {phead=new(node);Res=NULL;}
     ~Spisok() {delete phead;}
     void POSTROENIE ();
     void VYVOD ();
     node *POISK (int);
     void YDALE ();
     void DOBAV();
     void OCHISTKA();
 };
 
int main ()
{
  system("cls");
  Spisok A;
  int   el;
  node *Res_Zn;
 
  A.POSTROENIE ();
  A.VYVOD ();
  cout<<"\nВведите элемент звена, после которого ";
  cout<<"осуществляется удаление:\n";
  cin>>el;
  Res_Zn=A.POISK (el);
  if  (Res_Zn!=NULL && (*Res_Zn).sled!=NULL)
    {A.YDALE (); A.VYVOD ();}
  else  cout<<"Звена с заданным элементом в списке нет!";
  cout<<"\nВведите элемент звена, после которого ";
  cout<<"осуществляется добавление:\n";
  cin>>el;
  Res_Zn=A.POISK (el);
  if  (Res_Zn!=NULL && (*Res_Zn).sled!=NULL)
    {A.DOBAV (); A.VYVOD ();}
  else  cout<<"Звена с заданным элементом в списке нет!";
  A. OCHISTKA();
}
 
void Spisok::POSTROENIE ()
//Построение однонаправленного списка с заглавным звеном.
//phead -указатель на заглавное звено
{
  node *t;
  int  el;
 
  t = phead; (*t).sled = NULL;
  cout<<"Вводите элементы звеньев списка: \n";
  cin>>el;
  while  (el!=0)
  {
    (*t).sled = new (node);
    t = (*t).sled; (*t).elem = el; (*t).sled = NULL;
    cin>>el;
  }
}
 
void Spisok::VYVOD ()
//Вывод содержимого однонаправленного списка.
//phead - указатель на заглавное звено.
{
  node *t;
 
  t = phead; t = (*t).sled;
  cout<<"Список: ";
  while  (t!=NULL)
  {
         cout<<(*t).elem <<" ";
    t = (*t).sled;
  }
}
 
 node *Spisok::POISK (int el)
//Поиск звена с элементом el в списке, заданном указателем phead.
//В случае успешного поиска в Res находится адрес искомого звена  
//списка. В противном случае Res содержит NULL.
{
  node *t;
 
  Res = NULL; t = phead; t = (*t).sled;
  while  (t!=NULL && Res==NULL)
    if  ((*t).elem==el)  Res = t;
    else  t = (*t).sled;
  return Res;
}
 
void Spisok::YDALE ()
//Удаление звена, расположенного после звена,
//на которое указывает ссылка Res. 
{
  node *q;
  q = (*Res).sled;
  if  (q!=NULL)
  {
    //Если звено, после которого нужно удалять,
    //не является последним, то:
    (*Res).sled = (*(*Res).sled).sled; delete q;
  }
  else
    cout<<"Звено с заданным элементом - последнее!\n";
}
 
void Spisok::DOBAV ()
//Добавление звена, после того на который указывает ссылка Res.
{
  node *q;
  int  el;
  q = Res;
  (*q).sled = NULL;
  cout<<"Вводите добавляемый элемент : ";
  cin>>el;
  if  (q!=NULL)
  {
    (*q).sled = new (node);
    q = (*q).sled; (*q).elem = el;
   }
  else
    cout<<"Звено с заданным элементом - последнее!\n";
}
 
void Spisok::OCHISTKA ()
//Удаление однонаправленного списка из памяти.
// phead - указатель на заглавное звено списка.
{
  node *q,*q1;// Рабочие указатели.
 
  q = phead;
  q1 = (*q).sled; // Указатель q1 "опережает" указатель q.
  while (q1!=NULL)
  { q = q1; q1 = (*q1).sled; delete q;}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2010, 17:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Списки (C++):

Списки, как склеить списки между собой? - C++
Ребят, привет всем, есть код, в классе которого описаны несколько методов: добавление элемента в список, удаление и просмотр списка, дак...

списки - C++
написать функцию, удаляющую первый отрицательный элемент списка.

Списки в С++ - C++
#include&lt;iostream.h&gt; #include &quot;time_1.h&quot; #include&lt;time.h&gt; #include&lt;windows.h&gt; char* Rus (const char* text); class List { ...

Списки - C++
Работа со списками( объединение, удаление, вставка и.т.п). при запуске выдает ошибки. :-| устала уже с ней( С++, Builder 6 ...

Списки - C++
Здравствуйте! Помогите пожалуйста с программой.... Надо вывести список поездов , а потом вывести поезда которые отправляются в...

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2010, 17:10
Привет! Вот еще темы с ответами:

Списки - C++
Всем привет!) У меня есть вопрос..как создать два списка? Просто мне нужно из списка В переместить содержимое в список А. Как это сделать и...

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

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

списки - C++
Организуйте помещение вводимых чисел в список, так чтобы получился список, упорядоченный по возрастанию помогите,пожалуйста,прошу...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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