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

Стек через класс - C++

Восстановить пароль Регистрация
 
QINeoNIQ
0 / 0 / 0
Регистрация: 08.11.2012
Сообщений: 4
08.11.2012, 20:31     Стек через класс #1
Не всекаю где проблема, после создания new_el, значения стека p по переменной fam меняются.
Задача такова: создать отсортированный список фамилий.
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
#include<stdio.h>
#include<fstream>
#include<string.h>
using namespace std;
class persona
{ 
 
      persona *next;      
      char *fam;
      public:
               
              //~persona(){free (fam);};
             persona(char s[]='\0');
             persona* add_persona(persona*);
             persona* delete_persona(persona*);
             int find_persona(persona*,char*);
             void print_persona(persona*);           
             
};
       
 
persona::persona(char *s)
{
fam=strdup(s);
next=NULL;
};
 
persona *persona:: add_persona(persona *f)
{      
persona *ptr,*prev;
ptr=f;
prev=NULL;
if(f==NULL)
  {
   f=this;
   return f;
   };
while (ptr!=NULL && strcmp(this->fam, ptr->fam)>0)
      {
       prev=ptr;
       ptr=ptr->next;
       };
       if (prev)
         {
          prev->next=this;
          this->next=ptr;
          f=this;
         }
         else
         {
          this->next=f;
          f=this;
         };
         return f;
}
int main(void)
{
persona *p=NULL;
char *f,*g;
int n;
ifstream in("input.txt");
in>>n;
for(int i=0;i<n;i++)
{
        in>>f;
        persona new_el(f);
        p=new_el.add_persona(p);
 
 
};
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2012, 20:31     Стек через класс
Посмотрите здесь:

C++ Класс, реализующий стек
Класс стек, рекурсия, C++
Класс Стек Stack. не работает класс исключений C++
Класс стек C++
C++ Определить класс стек
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.11.2012, 20:40     Стек через класс #2
код немного непонятен. При чём тут strcmp? Ты новую персону вставляешь куда-то в середину, в зависимости от strcmp? Тогда это уже не совсем стек.
Прочитал задание. А! Всё-таки это отсортированный список, не стек! Ясно.

Добавлено через 3 минуты
Цитата Сообщение от QINeoNIQ Посмотреть сообщение
strcmp(this->fam, ptr->fam)
Цитата Сообщение от QINeoNIQ Посмотреть сообщение
persona *persona:: add_persona(persona *f)
Хотя всё равно не ясно, что куда вставляется.
Персона *f вставляется в список, начинающийся с *this, т.е. объекта, для которого вызвали add_persona! верно? тогда почему список обходится начиная с f?

Получается функция должна вызываться для объекта this, пока не добавленного, и добавлять в список, начинающийся с f?
QINeoNIQ
0 / 0 / 0
Регистрация: 08.11.2012
Сообщений: 4
08.11.2012, 20:47  [ТС]     Стек через класс #3
this->fam у него значение нынешнего *f. создается new_el->fam и этот элемент нужно записать в p, при этом если p!=NULL, то new_el->fam вставляется туда куда ему позволяет это действие
Цитата Сообщение от QINeoNIQ Посмотреть сообщение
while (ptr!=NULL && strcmp(this->fam, ptr->fam)>0)
{
prev=ptr;
ptr=ptr->next;
};
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.11.2012, 21:00     Стек через класс #4
Т.е. эта функция должна вызываться для ВСТАВЛЯЕМОГО нового элемента, а add_persona(persona *f - это начало списка???
QINeoNIQ
0 / 0 / 0
Регистрация: 08.11.2012
Сообщений: 4
08.11.2012, 21:05  [ТС]     Стек через класс #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Т.е. эта функция должна вызываться для ВСТАВЛЯЕМОГО нового элемента, а add_persona(persona *f - это начало списка???
выходит, что да
Yandex
Объявления
08.11.2012, 21:05     Стек через класс
Ответ Создать тему
Опции темы

Текущее время: 06:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru