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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2010, 11:55   #1
Demonhunterus
Пользователь
 
Регистрация: 16.10.2010
Сообщений: 11
По умолчанию Из двусвязного в односвязный список(C++)

Код:
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <cstring>

using namespace std;

struct base {
  char fio [30]; // ФИО сотрудника
  char bolezn [50]; // Название болезни
  int dlit;         // Длительность болезни
  base *prev;       // Указатель на предыдущую запись
  base *next;       // Указатель на следующую запись
};

base *first = NULL; // Указатель на начало списка
base *last = NULL;  // Указатель на конец списка


int List (void);   

void AddItem (void)
{
  base *db;

  // создаем новую структуру
  db = new base;
  // заполняем её
  cout << "Введите фамилию сотрудника: ";
  cin >> db->fio;
  cout << "Введите название болезни: ";
  cin >> db->bolezn;
  cout << "Введите длительность болезни: ";
  cin >> db->dlit;
  // добавляем в список
  if (last != NULL) // если список уже существует
  {
    db->prev = last;
    db->next = NULL;
    last->next = db;
    last = db;
  }
  else              // если список ещё не создан
  {
    db->prev = NULL;
    db->next = NULL;
    first = db;
    last = db;
  };
}


void DeleteItem (void)
{
  // выводим список всех структур
  int i = List ();
  int num;

  cout << "Введите номер удаляемой записи ";
  cin >> num;
  if (num < 1 || num > i) return;

  base *db = first;
  // находим указатель на удаляемую структуру
  for (i = 1; i < num; i++)
  {
    db = db->next;
  }
  // удаляем её
  if (db)
  {
    if (db->prev) db->prev->next = db->next;
    if (db->next) db->next->prev = db->prev;
    if (db == first) first = first->next;
    if (db == last) last = last->prev;
    delete db;
  };
}
Помогите разобраться,как это дело должно выглядеть для односвязного списка?
Пытался сделать что-то типа
Код:
  if (first == NULL) // если список уже существует
  { first=db;
    first->next=NULL;
    
  }
  else              // если список ещё не создан
  {
   db->next=last->next;
    last->next=db;
  };
}
для вставки элемента,но после двух введенных элементов программа вылетает.А для удаления - вообще атас.
Demonhunterus вне форума Ответить с цитированием
Старый 24.10.2010, 12:42   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,821
По умолчанию

хотя бы темы внизу посмотрели
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
односвязный список melkaya19 Помощь студентам 5 21.06.2010 12:36
Односвязный список masha17 Общие вопросы C/C++ 1 09.12.2009 12:20
Односвязный список crusarder Помощь студентам 1 23.10.2009 17:56
[C] Односвязный список Dieno Помощь студентам 2 19.10.2009 18:52
C++. Односвязный список. Уничтожить список Olya90 Помощь студентам 2 10.06.2009 18:52