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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 65, средняя оценка - 4.74
yuliyayuliya28
4 / 4 / 0
Регистрация: 06.03.2011
Сообщений: 319
#1

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

26.04.2011, 00:02. Просмотров 9049. Ответов 5
Метки нет (Все метки)

Удаление элемента происходит правильно а вот с добавлением чтото не то.....вроде вставляет в конец списка но не то...... и как сделать так чтобы вставлял после элемента который ввел....



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;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2011, 00:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Односвязный список добавить и удалить элемент (C++):

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

Односвязный список: удалить последний элемент равный 0 - C++
Удалить последний элемент однонаправленного списка равный 0.

Двусвязный список - Добавить элемент после заданного, удалить заданный элемент - C++
Реализуйте списочную структуру в виде класса. работа состоит из двух частей: из класса (структуры, алгоритма) и из тестирующего кода. ...

Динамический двусвязный список (операции: добавить элемент после данного, удалить данный элемент …) - C++
реализовать Динамический двусвязный список (операции: добавить элемент после данного, удалить данный элемент …). используя: class List...

Сформировать двунаправленный список. Удалить из него элемент с заданным ключом, добавить элемент с указанным номером - C++
Записи в линейном списке содержат ключевое поле типа *char(строка символов). Сформировать двунаправленный список. Удалить из него элемент с...

Однонаправленный список. Операции: удалить элемент из заданной позиции, добавить элемент в заданную позицию,проверка на неравенство - C++
Помогите. Есть одна написанная. Условия: Очередь. Операции: “+” добавить элемент ; “-“ удалить элемент ; bool() проверка «Пуста...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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 секунд
Кольцевой односвязный список
про список читайте тут
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
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, не приходила в голову мысль, что ТС может не знать про классы еще?
1
yuliyayuliya28
4 / 4 / 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();
 
}
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
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, что будет?
1
yuliyayuliya28
4 / 4 / 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();
 
}
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2011, 21:29
Привет! Вот еще темы с ответами:

Список: создать два списка, заполнить вручную с клавиатуры, удалить и добавить элемент - C++
Нужно создать оба списка, заполнить вручную с клавиатуры, удалить и добавить элемент, поменять любые два элемента с помощью функции swap....

Вставить элемент в односвязный список - C++
Есть у меня такой код: Node *pv = new Node; //Node *b; char symbol; pv = head; valcount++; if (pv-&gt;item == 'A') { ...

односвязный список не вставляет последний элемент - C++
крашит при вставке последнего( с остальными вроде все норм #include&lt;iostream&gt; using namespace std; struct A { int key; }; ...

Записи в линейном списке содержат ключевое поле типа int. Сформиро-вать двунаправленный список. Добавить в него элемент с заданным номером, удалить К - C++
Записи в линейном списке содержат ключевое поле типа int. Сформиро-вать двунаправленный список. Добавить в него элемент с заданным номером,...


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

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

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