Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите со списком на С++, вставка и удаление элементов 
:(
    Опции темы
k03tik
Дата 5.7.2006, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 3.6.2006
Где: Саратов

Репутация: нет
Всего: нет



Кто нибудь знает как реализовать класс списка чтобы можно было вставлять элементы (не только в конец) в середину списка например или куда захочеться??? 
PM MAIL   Вверх
Rockie
Дата 5.7.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



про списки можно читать здесь списки на BIZ-е, с 28-ого урока. а вообще нужно выбрать место, куда вставить новое звено, и перекинуть указатели. указатель "next" предыдущего звена втыкаем в наше новое звено, а указатель "next" нашего нового звена - настраиваем на следующий элемент. 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
k03tik
Дата 5.7.2006, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 3.6.2006
Где: Саратов

Репутация: нет
Всего: нет



Ну а например я выбрал место, а реализовать как это...там список вроде через указатели на следующие элементы и добавлять по очереди понятно как, а вот чтобы вставить куда-то нужно же ещё что-то использовать вот только что может массив но я не пойму как это сделать  smile вот в чем вопрос 
PM MAIL   Вверх
Rockie
Дата 6.7.2006, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Цитата(k03tik @  5.7.2006,  21:28 Найти цитируемый пост)
.там список вроде через указатели на следующие элементы и добавлять по очереди понятно как

..может быть.
Цитата(k03tik @  5.7.2006,  21:28 Найти цитируемый пост)
 а вот чтобы вставить куда-то нужно же ещё что-то использовать вот только что может массив но я не пойму как это сделать   вот в чем вопрос 

я так полагаю вставлять "куда-то" можно в целях упорядочивания. то есть например пятерку нужно будет поместить между 3 и 7. тогда весь список будет в итоге упорядочен по возрастанию. а вообще - 
Цитата(Rockie @  5.7.2006,  21:16 Найти цитируемый пост)
про списки можно читать здесь списки на BIZ-е, с 28-ого урока.




 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
k03tik
Дата 6.7.2006, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 3.6.2006
Где: Саратов

Репутация: нет
Всего: нет



Так прикол в том что мне надо сделать именно так чтобы можно было вставлять куда захочеться и вот как это сделать я не знаю  smile  
PM MAIL   Вверх
Antropoid
Дата 6.7.2006, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 1
Всего: 16



Цитата(k03tik @ 6.7.2006,  09:44)
Так прикол в том что мне надо сделать именно так чтобы можно было вставлять куда захочеться и вот как это сделать я не знаю  smile

Вот тебе работающий код. Нужная тебе функция - str* vstav_before(str*first,int E,int E1); - вставляет в список с корнем first, элемент E1, перед элементом E(не его номером, а значением!).

Код

#include<iostream.h>
#include<alloc.h>
struct str{
 int data;
 str* next;};
//---------------------------
str* vvod(int n,str *first_1);
void print(str* p);
str* vstav_before(str*first,int E,int E1);
int main()
{int m=5;
 int E1=999;
 int E=15;
 str* perv=NULL;
 cout<<"\n";
 cout<<"Введите список"<<endl;
//---------------------------
 perv=(str*)malloc(sizeof(str));
 cin>>perv->data;
 perv->next=NULL;
//---------------------------
 vvod(m,perv);
 cout<<"Список до "<<endl;
 print(perv);//распечатка списка
//---------------------------
//---------------------------
 cout<<"Список после "<<endl;
 print(vstav_before(perv,E,E1));//распечатка списка
 cout<<"\n";
 return 0;
}
//--------------------------
str* vstav_before(str*first,int E,int E1)
{str* pv=first,*new_zv,*prev;
 if(pv->data==E)
  { new_zv=(str*)malloc(sizeof(str));
    new_zv->data=E1;
    new_zv->next=pv;
    return new_zv;
  }
 while(pv)
 {if(pv->data==E)
   { new_zv=new str;
     new_zv->data=E1;
     new_zv->next=pv;
     prev->next=new_zv;
     break;
   }
  prev=pv;
  pv=pv->next;
 }
return first;
}
//--------------------------
//Ввод списка
str* vvod(int n,str*first_1)
{str *end=first_1,*second;
 if(n>=1)
  {
  for(int i=2;i<=n;i++)
   {
    end->next=(str*)malloc(sizeof(str));
    cin>>end->next->data;
     end->next->next=NULL;
    if(i==2) second=end->next;
    end=end->next;
   }
  }
 return second;
}
//----------------------------------
//Вывод списка
void print(str* ik)
{
 if(!ik) cout<<"EMPTY"<<"\n";
 while(ik)
  {cout<<ik->data<<" ";
   ik=ik->next;
  }
 cout<<"\n";
}

 


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Rockie
Дата 6.7.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Цитата(k03tik @  6.7.2006,  09:44 Найти цитируемый пост)
Так прикол в том что мне надо сделать именно так чтобы можно было вставлять куда захочеться и вот как это сделать я не знаю    

если нужно вставить элемент на третью позицию то начинаешь с первого узла списка и мотаешь в цикле 3 раза, потом вставляешь. в этом смысле? 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.