Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Работа с односвязным списком...


Автор: Nelson1992 26.11.2011, 00:45
У меня задание :  Записи в линейном списке содержат ключевое поле типа 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(); 
 }


Автор: Twelves 26.11.2011, 18:57
Код

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 раз с нужными параметрами

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)