Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Удаление элемента из двусвязного списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Транспонирование одномерного массива http://www.cyberforum.ru/cpp-beginners/thread826773.html
int main() { setlocale(LC_ALL,".1251"); int mas ; int n = 0; cout <<"Введите размер массива"; cin >> n; cout << "Введите члены последовательности(через пробел):\n";
C++ сохранение в файл Всем привет. Люди добрые помогите пж сохранить введенный результат в файл. #include <iostream.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> FILE *fl; ... http://www.cyberforum.ru/cpp-beginners/thread826763.html
перевод из Delphi в Builder C++
type Point = record color : TColor; x, y : Integer; end; type PointArray = array of array of Point; var pa: PointArray;
C++ Проблемы с загрузкой DLL
Здравствуйте! Скачал отсюда библиотеку: phash.org Создал консольный проект проект( в Visual C++ 2010 Express): #include "stdafx.h" #include <iostream> #include <windows.h>
C++ удаление и поиск в списке http://www.cyberforum.ru/cpp-beginners/thread826735.html
Подскажите, как реализовать функции удаления и поиска числа в списке? Нужно, что бы удаление происходило по индексу элемента, а поиск по всему списку и выводил индексы найденных чисел.
C++ присвоить заведомо не зная ох. Задача из ряда невыполнимых для мозга. Есть класс, например: class Class1 { Class1(string fileName) { //открываем файл и считаем строки int count; //в... подробнее

Показать сообщение отдельно
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124

Удаление элемента из двусвязного списка - C++

03.04.2013, 12:24. Просмотров 1825. Ответов 3
Метки (Все метки)

Надо удалить элемент из двусвязного списка, если выполняется условие (2013-(current->god)<3). Я пытаюсь как могу, но что то все равно косяки идут. Подскажите...


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <conio.h>
#include <windows.h>
#include <iostream>
 
using namespace std;
//Создать структуру с именем Sotrudnik с полями: 
//фамилия, имя, должность, год поступления на работу.
//Сформировать двусвязный список. Удалить из списка тех сотрудников,
//кто работает менее 3-х лет. Вывести измененный список.
struct Sotrudnik
{
    char Famil[100];
    char Imya[100];
 
    char Dolznost[100];
    int god;
 
        Sotrudnik * next;
        Sotrudnik * prev;
        //Sotrudnik * tmp;
};
Sotrudnik *head=0;//адрес головы списка
Sotrudnik * tail=0;//адрес хвоста списка
//head->prev=0;
Sotrudnik *current,*tmp, *tyear;// tyear-работающий меньше 3 лет.
int main() 
{
    SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char c;
int k;
cout<<"Ввести данные о субъекте? д/Д";
 c=_getche();     
 //формирование списка с клавиатуры
 while (c=='д' || c=='Д')  
 {
if (head) //если не первый элемент списка
 { tail->next=new Sotrudnik;  /* создаем новый элемент и объяв-ляем его следующим для последнего элемента */
 
   tail->next->prev=tail; /* для вновь созданного элемента объявляем текущий последний элемент списка предыдущим */
   tail=tail->next;  /* созданный элемент списка объявляем по-следним */
   current=tail;
  }
else  //если создаем первый элемент списка
  { head=new Sotrudnik; /* созданный элемент объявляем головой списка */
    tail=head;   //он же пока и последний
    head->prev=0;  //у первого элемента нет предыдущего эле-мента
    current=head;
  }
 
 cout<<"\nВведите данные о субъекте:\n";
  cout<<"Фамилия:";
  cin>> current->Famil;
  cout<<"Имя:";
  cin>> current->Imya;
  cout<<"Должность:";
  cin>> current->Dolznost;
  cout<<"Год поступления на работу:";
  cin>>current->god;
  current->next=0;
  cout<<"Ввести данные о еще одном субъекте? д/н \n";
  c=_getche();
 
tail->next=0; /* у последнего элемента списка адрес не следующего элемента */
}
 
 
/* current=head;
  while(current!=0)
  {
      cout<<"Фамилия: \t";
     cout<<current->Famil<<"\n";
        cout<<"Имя:\t";
     cout<<current->Imya<<"\n";
        cout<<"Должность: \t";
    cout<<current->Dolznost<<"\n";
      cout<<"Год поступления на работу: \t";
          cout<<current->god<<"\n";
    current=current->next;
    cout<<"\n";
  }*/
current=head;
  while(current!=0)
  { 
      if (2013-(current->god))
      {
      current->next->prev=current->prev;
      current->prev->next=current->next;
      *tmp=*current;
      current=current->next;
      delete tmp;
      }
  }
current=head;
  while(current!=0)
  {
      cout<<"Фамилия: \t";
     cout<<current->Famil<<"\n";
        cout<<"Имя:\t";
     cout<<current->Imya<<"\n";
        cout<<"Должность: \t";
    cout<<current->Dolznost<<"\n";
      cout<<"Год поступления на работу: \t";
          cout<<current->god<<"\n";
    current=current->next;
    cout<<"\n";
  }
  
  system("pause");
  return 0;
}
Это весь код, а вот блок ответственный за удаление.
C++
1
2
3
4
5
6
7
8
9
10
11
12
current=head;
  while(current!=0)
  { 
      if (2013-(current->god))
      {
      current->next->prev=current->prev;
      current->prev->next=current->next;
      *tmp=*current;
      current=current->next;
      delete tmp;
      }
  }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru