Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/98: Рейтинг темы: голосов - 98, средняя оценка - 4.82
4 / 4 / 4
Регистрация: 06.03.2011
Сообщений: 319

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

26.04.2011, 00:02. Показов 20613. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.04.2011, 00:02
Ответы с готовыми решениями:

Односвязный список: удалить элемент списка, если он чётный и следующий элемент отрицательный и нечётный
Здравствуйте. Задание на односвязные списки: удалить элемент списка, если он чётный и следующий элемент отрицательный и нечётный(реализация...

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

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

5
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
26.04.2011, 00:58
вашу же... !
что вы творите, сэр?
сделайте класс, опишите методы! Будет намного проще!
То что выше даже читать не буду! + используйте код C++, C

то что бросилось в глаза:
C++
1
2
3
cout<<tmp1->value<<" ";
cout<<endl;
cout<<"Добавление элемента";
пишется одной строкой:
C++
1
cout<<tmp1->value<<" "<< endl <<"Добавление элемента" << endl;;
Добавлено через 13 секунд
Кольцевой односвязный список
про список читайте тут
0
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,303
26.04.2011, 02:57
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
4 / 4 / 4
Регистрация: 06.03.2011
Сообщений: 319
26.04.2011, 08:02  [ТС]
Цитата Сообщение от 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
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,303
26.04.2011, 08:27
Цитата Сообщение от 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
4 / 4 / 4
Регистрация: 06.03.2011
Сообщений: 319
26.04.2011, 21:29  [ТС]
Вот код который работает если в списке есть элементы равные 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2011, 21:29
Помогаю со студенческими работами здесь

Односвязный список: после каждого отрицательного элемента добавить новый элемент, равный 0
Односвязный массив. Нужно после каждого отрицательного элемента добавить после него новый элемент равный 0. Создал функцию &quot;add...

Создать линейный односвязный список из вещественных чисел. Удалить из списка элемент перед каждым элементом со значен
Создать линейный односвязный список из вещественных чисел. Удалить из списка элемент перед каждым элементом со значением 55. Вывести список...

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru