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

Односвязный список добавить и удалить элемент - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 65, средняя оценка - 4.74
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
26.04.2011, 00:02     Односвязный список добавить и удалить элемент #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
59
60
61
62
63
64
65
66
67
68
#include "stdafx.h"
#include <conio.h>
#include "iostream"
#include <time.h>
 
using namespace std;
 
struct node
{
int value;
node *next;
};
 
void main (void)
{
setlocale(LC_ALL,"");
int a;int n;int m=0;
srand(time(NULL));
cout<<"Введите количество элементов списка";
cin>>a;
 
node* head;
node*c;
 
head= new node;
head ->value=5;
node* tmp;
node* tmp1;
tmp=head;
for(int i=0 ;i<a;i++)
{
tmp1=new node;
tmp1->value=rand()%100;
tmp->next=tmp1;
tmp1->next=NULL;
tmp=tmp1;
}
cout<<"Список...";
cout<<endl;
for(tmp1=head;tmp1!=NULL;tmp1=tmp1->next)
cout<<tmp1->value<<" ";
cout<<endl;
 
cout<<"Удаление элемента"<<endl;
cout<<"Введите n=";
cin>>n;
c=head;
while(c->next->value != n)
c=c->next;
tmp1=head;
while(tmp1->value != n)
tmp1=tmp1->next;
c->next = tmp1->next;
delete tmp1;
for(tmp1=head;tmp1!=NULL;tmp1=tmp1->next)
cout<<tmp1->value<<" ";
cout<<endl;
cout<<"Добавление элемента";
c = new node;
for(tmp1=head;tmp1->next!=NULL;tmp1=tmp1->next);
c->next = NULL;
tmp1->next = c;
cout<<endl;
for(tmp1=head;tmp1!=NULL;tmp1=tmp1->next)
cout<<tmp1->value<<" ";
getch();
 
}
Добавлено через 52 минуты
Пытаюсь добавить после m..плачевно получается..помогите пожалуйста


C++
1
2
3
4
5
6
7
8
9
cout<<"Добавление элемента";
cin>>m;
while (tmp1->value !=m)
tmp1=tmp1->next;
else
c->next =tmp1->next;
tmp1->next = c;
c->value=6;
cout<<endl;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2011, 00:02     Односвязный список добавить и удалить элемент
Посмотрите здесь:

Динамический двусвязный список (операции: добавить элемент после данного, удалить данный элемент …) C++
Односвязный список (за первым вхождением элемента с заданным значением z добавить все элементы списка В) C++
C++ Однонаправленный список. Операции: удалить элемент из заданной позиции, добавить элемент в заданную позицию,проверка на неравенство
C++ Записи в линейном списке содержат ключевое поле типа int. Сформиро-вать двунаправленный список. Добавить в него элемент с заданным номером, удалить К
Сформировать двунаправленный список. Удалить из него элемент с заданным ключом, добавить элемент с указанным номером C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
26.04.2011, 00:58     Односвязный список добавить и удалить элемент #2
вашу же... !
что вы творите, сэр?
сделайте класс, опишите методы! Будет намного проще!
То что выше даже читать не буду! + используйте код C++, C

то что бросилось в глаза:
C++
1
2
3
cout<<tmp1->value<<" ";
cout<<endl;
cout<<"Добавление элемента";
пишется одной строкой:
C++
1
cout<<tmp1->value<<" "<< endl <<"Добавление элемента" << endl;;
Добавлено через 13 секунд
Кольцевой односвязный список
про список читайте тут
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.04.2011, 02:57     Односвязный список добавить и удалить элемент #3
C++
1
2
3
4
5
6
7
8
9
10
11
while (!tmp1->next)
{
   if (tmp1->value == m)
   {
      c->next = tmp1->next;
      tmp1->next = c;
      break;
   }
   else
      tmp1 = tmp1->next;
}
и внимательней с циклами, не забываем про фигурные скобки, и забываем про точку с запятой после условия цикла.

VladSharikov, не приходила в голову мысль, что ТС может не знать про классы еще?
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
26.04.2011, 08:02  [ТС]     Односвязный список добавить и удалить элемент #4
Цитата Сообщение от VladSharikov Посмотреть сообщение
вашу же... !
что вы творите, сэр?
сделайте класс, опишите методы! Будет намного проще!
То что выше даже читать не буду! + используйте код C++, C

то что бросилось в глаза:
C++
1
2
3
cout<<tmp1->value<<" ";
cout<<endl;
cout<<"Добавление элемента";
пишется одной строкой:
C++
1
cout<<tmp1->value<<" "<< endl <<"Добавление элемента" << endl;;
Добавлено через 13 секунд
Кольцевой односвязный список
про список читайте тут
Мы ещё не изучали классы...нужно на основе указателей......почти работает)

Добавлено через 7 минут
Цитата Сообщение от kazak Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
while (!tmp1->next)
{
   if (tmp1->value == m)
   {
      c->next = tmp1->next;
      tmp1->next = c;
      break;
   }
   else
      tmp1 = tmp1->next;
}
и внимательней с циклами, не забываем про фигурные скобки, и забываем про точку с запятой после условия цикла.

VladSharikov, не приходила в голову мысль, что ТС может не знать про классы еще?

Спасибо большое.....но чтото не работает(посмотри пожалуйста.....может исправите ошибки

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
#include "stdafx.h"
#include <conio.h>
#include "iostream"
#include <time.h>
 
using namespace std;
 
struct node
{
int value;
node *next;
};
 
void main (void)
{
setlocale(LC_ALL,"");
int a;int n;int m;
srand(time(NULL));
 
cout<<"Введите количество элементов списка";
cin>>a;
 
node* head;
node*c;
node*c1;
head= new node;
head ->value=5;
node* tmp;
node* tmp1;
tmp=head;
for(int i=0 ;i<a;i++)
{
tmp1=new node;
tmp1->value=rand()%100;
tmp->next=tmp1;
tmp1->next=NULL;
tmp=tmp1;
}
cout<<"Список...";
cout<<endl;
for(tmp1=head;tmp1!=NULL;tmp1=tmp1->next)
cout<<tmp1->value<<" ";
cout<<endl;
 
cout<<"Удаление элемента"<<endl;
cout<<"Введите n=";
cin>>n;
c=head;
while(c->next->value != n)
c=c->next;
tmp1=head;
while(tmp1->value != n)
tmp1=tmp1->next;
c->next = tmp1->next;
delete tmp1;
 
for(tmp1=head;tmp1!=NULL;tmp1=tmp1->next)
cout<<tmp1->value<<" ";
cout<<endl;
 
cout<<"Добавление элемента";
cin>>m;
 
while (!tmp1->next)
{
   if (tmp1->value == m)
   {
      c1->next = tmp1->next;
      tmp1->next = c1;
      break;
   }
   else
      tmp1 = tmp1->next;
}
 
for(tmp1=head;tmp1!=NULL;tmp1=tmp1->next)
cout<<tmp1->value<<" ";
getch();
 
}
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.04.2011, 08:27     Односвязный список добавить и удалить элемент #5
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
C
1
2
3
4
5
6
7
while(c->next->value != n)
c=c->next;
tmp1=head;
while(tmp1->value != n)
tmp1=tmp1->next;
c->next = tmp1->next;
delete tmp1;
А если в списке не найдется значения равного n, что будет?
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
26.04.2011, 21:29  [ТС]     Односвязный список добавить и удалить элемент #6
Вот код который работает если в списке есть элементы равные m и n
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
#include "stdafx.h"
#include <conio.h>
#include "iostream"
#include <time.h>
 
using namespace std;
 
struct node
{
int value;
node *next;
};
 
void main (void)
{
setlocale(LC_ALL,"");
int a,n,m;
srand(time(NULL));
cout<<"Количество элементов в списке";
cin>>a;
 
node* head;
node*c;
node*c1;
 
head= new node;
head ->value=5;
node* tmp;
node* tmp1;
tmp=head;
for(int i=0 ;i<a;i++)
{
tmp1=new node;
tmp1->value=rand()%100;
tmp->next=tmp1;
tmp1->next=NULL;
tmp=tmp1;
}
cout<<"Список...";
for(tmp1=head;tmp1!=NULL;tmp1=tmp1->next)
cout<<tmp1->value<<" ";
cout<<endl;
cout<<endl;
cout<<"Удалить элемент из списка равный n"<<endl;
cin>>n;
cout<<endl;
c=head;
while(c->next->value != n)
c=c->next;
tmp1=head;
while(tmp1->value != n)
tmp1=tmp1->next;
c->next = tmp1->next;
delete tmp1;
 
for(tmp1=head;tmp1!=NULL;tmp1=tmp1->next)
cout<<tmp1->value<<" ";
 
cout<<"Добавить элемент равный m"<<endl;
cin>>m;
cout<<endl;
cout<<"Сам элемент: "<<endl;
int k;
cin>>k;
for(tmp1=head;((tmp1->value!=m)&&( tmp1->next != NULL));tmp1=tmp1->next);
  if(tmp1->next==NULL)
      cout<<"Нет";
  else 
  {
      c= new node;
      c->next=tmp1->next;
      c->value = k;
      tmp1->next=c;
  }
for(tmp1=head;tmp1!=NULL;tmp1=tmp1->next)
cout<<tmp1->value<<" ";
getch();
 
}
Yandex
Объявления
26.04.2011, 21:29     Односвязный список добавить и удалить элемент
Ответ Создать тему
Опции темы

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