Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2011, 23:59   #1
yuliyayuliya
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 14
По умолчанию односвязный список

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


Код:
 #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();

 }
yuliyayuliya вне форума Ответить с цитированием
Старый 26.04.2011, 16:17   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Чушь, у вас добавление нормальное, а удаление паленое.

Код:
 while(c->next->value != n)
 c=c->next;
 tmp1=head;
 while(tmp1->value != n)
 tmp1=tmp1->next;
 c->next = tmp1->next;
 delete tmp1;
В момент удаления у вас c и tmp1 абсолютно идентичны, указывают на один и тот же элемент. А c должен указывать на предыдущий элемент, чтобы из списка что-то там удалилось.
mMAg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Односвязный список pwdan Общие вопросы .NET 3 15.10.2010 14:23
Односвязный список crusarder Помощь студентам 1 23.10.2009 17:56
C++. Односвязный список. Уничтожить список Olya90 Помощь студентам 2 10.06.2009 18:52
Односвязный список. С++ Ozza Помощь студентам 1 06.02.2009 02:09