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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с односвязным списком... 
:(
    Опции темы
Nelson1992
  Дата 26.11.2011, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня задание :  Записи в линейном списке содержат ключевое поле типа int. Сформировать однонаправленный список. Удалить из него элемент с заданным номером, добавить К элементов, начиная с заданного номера;

Я сделал добавление, но только одного элемента, а надо К элементов, и удаление почему-то не работает...помогите кто сможет...

Код

#include <string.h>
#include<iostream>
#include <conio.h>
using namespace std;
 // Элемент данных 
 struct Element 
 { 
  // Данные 
  int data;  
  // Адрес следующего элемента списка 
  Element * Next; 

 }; 

 // Односвязный список 
 class List 
 { // Адрес головного элемента списка 
  Element * Head; 
  // Количество элементов списка 
  int Count; 

  public: 
  // Конструктор 
  List(); 

  // Добавление элемента в список 
  void Add(char data); 

  void PasteElement(int data, int position);
  
  void DelElement(int position);

  // Распечатка содержимого списка 
  void Print(); 

 }; 

 List::List() 
 { 
  Head = NULL; 
  Count = 0; 
 } 

 void List::Add(char data) 
 { 
  // создание нового элемента 
  Element * temp = new Element; 

  // заполнение данными 
  temp->data = data; 
  // следующий элемент - головной элемент списка 
  temp->Next = Head; 

  // новый элемент станвится головным элементом списка 
  Head = temp; 

  Count++; 
 } 

 void List::Print() 
 { 
  // запоминаем адрес головного элемента 
  Element * temp = Head; 
  // Пока еще есть элементы 
  while(temp != 0) 
  { 
  // Выводим данные 
  cout << temp->data<< " "; 
  // Переходим на следующий элемент 
  temp = temp->Next; 

  } 

  cout << endl; 
 } 
 
 void List::PasteElement(int data, int position)
{
   Element *temp=Head;
   while(Count---position!=0)
   {
       temp=temp->Next;
   }
 
   Element *temp2;
   temp2=temp->Next;
 
   Element newel, *ptr_newel;
 
   ptr_newel=&newel;
 
   ptr_newel->data=data;
   ptr_newel->Next=temp2;
 
   temp->Next=ptr_newel;
   Count++;
}
 
void List::DelElement(int position)
{
    Element *temp=Head;
    while(Count---(position+1)!=0)
    {
        temp=temp->Next;
    }
    Element *temp2=temp->Next;
    Element *temp3=temp2->Next;
 
    temp->Next=temp3;
    delete temp2;
    Count--;
}
 
 // Тестовый пример 
 int main() 
 { 
  setlocale (LC_CTYPE,"Russian");
  int k,n,x,y,q;
  // Создаем объект класса List 
  List lst; 
  cout<<"\nВведите количество элементов:\n";
  cin>>n;  
  for(int i=0; i <n; i++)
  { 
    cout<<"\nВведите элемент:\n";
    cin>>k;
    lst.Add(k); 
  }
  cout << "Заполненный список:" <<endl; 
  lst.Print();
  cout<<"\nВведите позицию с коротой добавлять:\n";
  cin>>y;
  cout<<"\nВведите елемент:\n";
  cin>>x;
  lst.PasteElement(x,y);
  lst.Print();
  cout<<"\nВведите номер элемента для удаления:\n";
  cin>>q; 
  lst.DelElement(q);
  lst.Print(); 
  getch(); 
 }


PM MAIL   Вверх
Twelves
Дата 26.11.2011, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

void List::Add(int pos, int data) { 

  // создание нового элемента 
  Element * temp = new Element; 

  temp->data = data;
  if(pos == 0){
     temp->next = head;
     head = temp;
  }else{
    
   Element * prev = head;
   Element *current = head->next;
   int cnt = 1;
 
  while(cnt != pos){
    prev = current;
    current = current->next;
    cnt++;
  }

   prev->next = temp;
   temp->next = current;
}

  Count++; 
 } 


Добавление элемента номером pos
Естественно, чтобы добавить K элементов, надо будет просто ее вызвать K раз с нужными параметрами
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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