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

Удаление узла в линейном списке - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Конструктор, принимающий параметр http://www.cyberforum.ru/cpp-beginners/thread1226702.html
привет. посмотрите листинг: // Префиксный и постфиксный операторы инкремента #include <iostream> using namespace std; class Counter { public: Counter(); ~Counter() {}
C++ Найти номер первого положительного элемента массива и сумму элементов правее него Найти номер первого положительного элемента массива b1,b2,b3,...,b10 и сумму элементов правее него. Вот мои наработки, сумма на 1 больше чем надо. #include <iostream> #include <conio.h> #include <time.h> using namespace std; int main(){ setlocale( LC_ALL,"Russian" ); const int size=10; int mas={-1,-2,-3,-4,-5,-6,7,8,9,10},p,res=0; http://www.cyberforum.ru/cpp-beginners/thread1226680.html
Перегрузка оператора ++ C++
выводит не то значение привет. нужна Ваша подсказка. листинг из учебника: (тема: перегрузка оператора ++) #include <iostream> using namespace std; class Counter { public: Counter();
C++ Char* не в той кодировке
Я читая память процесса игры и пытаюсь получить имя нужного мне обьекта, проблем найти нужный адрес труда не составило но в имени обьекта кирилица и вместо кирилици в char* nick я получаю кракозябры, проверял по байтово это те данные которые мне нужны но видимо нужно как-то изменить кодировку.
C++ Заполнить массив размером 10 случайными числами от 0 до 10 http://www.cyberforum.ru/cpp-beginners/thread1226658.html
#include <vector> #include <algorithm> #include <iostream> using namespace std; int main() { int n = 10; vector<int> a(n);
C++ Нужна среда разработки для C++ под Windows, сразу отбросив: VS, QTCreator Hello world! Последние полгода я активно сидел в C# VS Studio. И что-то захотелось С++ по-практиковать. Но тут важный момент, что желание практиковать С++ идёт в совокупности с желанием попробовать что-то кроме Visual Studio. Т.е я не хочу оставаться в той же Студии, просто на С++. Хочется немного независимости от неё. Авторитетный знакомый, работающий в Intel на С++ давно - советует не... подробнее

Показать сообщение отдельно
FloraWinx
4 / 4 / 1
Регистрация: 05.10.2013
Сообщений: 123

Удаление узла в линейном списке - C++

13.07.2014, 14:11. Просмотров 297. Ответов 2
Метки (Все метки)

У меня есть структура (файловая система) , я могу помещать туда файлы (здесь все работает). Содержаться следующие поля : имя файла , время создания , количество обращений. Количество обращений и время задается рандомно. Хотел сделать следующее я задаю время с клавиатуры и оно должно мне удалить те файлы которые были созданы раньше заданного времени. И что странно оно мне все время удаляет первый элемент моего списка, хотя функция поиска по ключу вроде работает нормально. Функция Удаления я вызываю функцию поиска по ключу ,ключ задается как массив с трех элементов (день.месяц.год) соответственно проверяю с года если встречаю узел который меньше передаю его в функцию удаления. Думаю еще как вариант написать функцию сортировки по времени и потом удалять просто хвост. Функции add , add_first , fill, get_info работают корректно их можно не смотреть.

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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <iostream>
#include <conio.h>
#include <time.h>
 using namespace std;
 struct  file_system{            
     char file_name [10]; 
     int file_cr [3]; 
     int file_response;};
 
   struct NODE {
     file_system file; 
     NODE *next; 
     NODE *prev; 
 
 };
 
   NODE *first(file_system file);
   NODE *find(NODE *const pbeg , int i);
   bool remove(NODE**pbeg , NODE **pend, int key);
 
   void get_info (file_system file , NODE *pb){
       cout<<"File name:"<< pb->file.file_name<<"\n";
       cout<<"File creation date:";
       for(int i=0;i<3;i++){
        cout<<pb->file.file_cr[i]<<".";}
       cout<<"\n";
       cout<<"File responses:"<<pb->file.file_response<<endl;
       
        
   }
 
 file_system **fill (file_system *file){
 srand(time(NULL));
 int first_value = 1990;
cout<<"Enter file name:";
cin>>file->file_name;
file->file_cr[0]=rand()%30;
file->file_cr[1]=rand()%12;
file->file_cr[2]=first_value+rand()%15;
cout<<"File data creation is :"<<file->file_cr[0]<<"."<<file->file_cr[1]<<"."<<file->file_cr[2]<<"\n";
file->file_response=rand()%10; 
cout<<"number of cals is seted up:"<<file->file_response<<endl;
return &file;
 }
 
 NODE * add_first (file_system file){
 
     NODE *pv =  new NODE;
     pv->file=file;
     pv->next=0;
     pv->prev=0;
     return pv;
 }
 
 NODE *find (NODE * const pbeg , int key[]) { // return data
    NODE *pv = pbeg;
    bool flag = false;
    while(pv){ 
 
        for(int i=2;i>=0;i--){
        if(pv->file.file_cr[i]<key[i]){
            flag=true;
            break; }
        }
 
        if(flag==true) break;
        else pv = pv->next;
 
    }
    return pv   ;
 }
 
 
bool remove (NODE ** pbeg, NODE **pend , int key [3]){
if(NODE *pkey = find(*pbeg, key)){
    if(pkey==*pbeg) {
        *pbeg=(*pbeg)->next;
        (*pbeg)->prev= 0;}
    else if(pkey==*pend){
        *pend = (*pend)->prev;
        (*pend)->next=0;}
    else {
        (pkey->prev)->next= pkey->next;
        (pkey->next)->prev = pkey->prev;}
    delete pkey;
    return true;
    }
return false;
}
 
 
 void add(NODE **pend , file_system file){
 fill(&file);
 
    NODE *pv = new NODE;
    pv->file = file;
    pv->next=0; 
    pv->prev=*pend;
    (*pend)->next=pv;
    *pend=pv;
 }
 
 
 int main(){
 
int n ;
cout<<"How much files you want to place in?:";
cin>>n;
 
file_system file;
 fill(&file);
 
NODE *pbeg = add_first(file);
NODE *pend = pbeg;
 
 
 for( int i=0;i<n-1;i++){
    add(&pend ,file);
    cout<<endl;}
 
NODE *pb = pbeg;
 
  system("cls");
 int l=1;
 
 while(pb){
    cout<<l<<")";
l++;
    get_info(file , pb);
 
pb=pb->next;
 
  }
 
 
 
 
 
  cout<<"enter date. All the files which were creater earlier will be deleted.";
    int date [3];
     cin>>date[0]>>date[1]>>date[2];
if(!remove(&pbeg, &pend , date)) cout<<"Not found";
 
NODE *kit = pbeg;
while(kit){
 
    get_info(file , kit);
    kit=kit->next;
}
 
 
 
 
 return 0;}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru