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

Указатели на структуры - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.78
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
06.11.2010, 18:20     Указатели на структуры #1
Pascal
1
2
3
4
5
type  celltype = record 
elетеt: integer; 
next: ^celltype 
end; 
DICTIONARY = array[0..B-1]  of  ^celltype;
какой аналог этой записи будет на си?
C++
1
2
3
4
5
6
7
typedef struct spis
{
    char *s;
    spis *next;
};
 
typedef struct spis *dict[maxn];
такой?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
17.11.2010, 02:10     Указатели на структуры #101
Artishok, Смотри.
У нас есть две С-строки.
Мы их сравниваем функцией strcmp. strcmp принимает параметры - две С-строки. Возвращает 0, если строки равны. значение больше нуля, если первая строка больше второй. и меньше нуля, если первая строка меньше второй
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
19.11.2010, 01:12  [ТС]     Указатели на структуры #102

Не по теме:

о.надо иногда читать теорию....

я думал что она возвращается значение равно или не равно..



Добавлено через 5 минут

Не по теме:

на повестке для остаётся закрытое хеширование,дек и деревья.хм.вперед и с песней



Добавлено через 1 час 2 минуты
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
#include <iostream>
#define maxn 1000
 
using namespace std;
 
const char *empty="          ";
      char *deleted="**********";
      
 
void makenull(dictionary *d)
{
    for(int i=0;i<maxn;i++)
    d[i]=empty;
}
 
int locate(char *x;dictionary *d)
{
    int i=0,initial=h(x);
    while(i<maxn)&&(d[(initial+i)%maxn]!=x)&&(d[(initial+i)%maxn]!=empty)//ïîêГ* Г*ГҐ ïðéäåò äî ГЄГ®Г*Г¶Г* ГЁ Г*ГҐ Г°Г*ГўГ*Г® x ГЁ Г*ГҐ ГЇГіГ±ГІГ*Гї ñòðîêГ*
    i++;
    return (initial+i)%maxn;
}
 
int locatel(char *x,dictionary *d)
{
    int i=0,initial=h(x);
    while(i<maxn)&&(!strcmp(d[(initial+i)%maxn]!=x))&&(!strcmp(d[(initial+i)%maxn]!=empty))&&(!strcmp(d[(initial+i)%maxn]!=deleted))
    i++;
    return (initial+i)%maxn;
}
 
void insert(char *x,dictionary *d)
{
    int bucket;
    if (!Strcmp(d[locate(x)]!=x))
    {
        
        bucket=locatel(x);
    //  char *x1=new char[strlen(x)+1];
    //  strcpy(x1,x);
        if (!strcmp(d[bucket]==empty)) || (!strcmp(d[bucket]==deleted))
            d[bucket]=x;
            else
            cout<<"It's full"<<endl;
    }
}
 
void del(char *x,dictionary *d)
{
    int bucket=locate(x);
    if (!strcmp(d[locate(x)]==x))
     d[bucket]=deleted;
}
            
int main()
{
  char dictionary[maxn][100];//ГЄГ*ГЄ îïèñГ*ГІГј ГЅГІГ® ÷åðåç ñòðóêòóðó?
  char s[5]="werty";
  insert(s,dictionary);
}
вот что у меня по закрытом хешированию

Добавлено через 23 часа 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
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
155
156
157
158
159
160
161
#include <iostream>
#define maxn 10
 
using namespace std;
 
const char *empty="          ";
const char *deleted="**********";
      
int ord(char o)//ïåðåâîä â êîä
{
    return (unsigned char) o;
}
 
int h(char *x)//åñëè Г*ГҐ Г§Г*Г*ГїГІГ®
{
    int sum=0;
    for (int i=0;i<strlen(x);i++)
    sum+=ord(x[i]);
    return sum%maxn;
}
 
int h1(char *x)//
{
    int sum=0;
    for (int i=0;i<strlen(x);i++)
    sum+=ord(x[i]);
    int el=sum%maxn;
    el++;
    return el;
}
    
void makenull(char **d)
{
    for(int i=0;i<maxn;i++)
    strcpy(d[i],empty);
}
 
int locate(char *x,char **d)//ëèáî Г*Г*éäåò ýëåìåГ*ГІ ëèáî äîéäåò äî ГЄГ®Г*Г¶Г* ëèáî
{
    int initial=h(x);
    int i=0;
    while (i<maxn)&&!(strcmp(d[(initial+i)%maxn]!=x))&&(d[(initial+i)%maxn]!=empty)//ГЄГ*ГЄ îïèñГ*ГІГј ñòðîêГ* Г*ГҐ Г°Г*ГўГ*Г*?
        i++;
        return (initial+i)%maxn;
}
 
int locatel(char *x,char **d)//ëèáî Г*Г*éäåò ýëåìåГ*ГІ ëèáî äîéäåò äî ГЄГ®Г*Г¶Г* ëèáî
{
    int initial=h(x);
    int i=0;
    while (i<maxn)&&(d[(initial+i)%maxn]!=x)&&(d[(initial+i)%maxn]!=empty)&&(d[(initial+i)%maxn]!=deleted)
        i++;
        return (initial+i)%maxn;
}
 
bool  member(char *x,char **d); 
{
  if  (!strcmp(A[locate(x)] == x)) 
     return true; 
  else; 
     return false; 
} 
 
void insert(char x[],char **d) 
 {
  int bucket=0;  
  if  (!(strcmp(d[locate(x)]!=x)) 
   {
    bucket=locatel(x); 
    if  (!strcmp(d[bucket],empty))||(!strcmp(d[bucket),deleted))  then 
    d[bucket]=x; 
    else
    {
        cout<<"It's full"<<endl;
        break;
    }
   }
 }
 
 void del(char *x,char **d)
 {
  int bucket=locate(x);  
   if (!strcmp(A[locate(x)],x))
      strcpy(a[bucket],deleted); 
 }
 
 void show(dictionary *d)
 {
    while (i<maxn)
    {
        cout<<i<<" ";
        cout<<d[i]<<" ";
        cout<<endl;
    }
 }
            
 
int main()
{
   char dictionary[maxn][100];//ГЄГ*ГЄ îïèñГ*ГІГј ГЅГІГ® ÷åðåç ñòðóêòóðó?
   makenull(dictionary);  
     while(0<1)
   {
    system("cls");
    cout<<"Insert into table-------1"<<endl;
    cout<<"Show table--------------2"<<endl;
    cout<<"Del elem----------------3"<<endl;
    cout<<"Find elem---------------4"<<endl;
    cout<<"Clean-------------------5"<<endl;
    cin>>el;
    switch(el)
    {
        case 1:
        {
            system("cls");
            char emb[80];
            cin>>emb;
            insert(emb,d);
            getchar();
            break;
        }
        case 2:
        {
            system("cls");
            show(d);
            getchar();
            break;
        }
        case 3:
        {
            system("cls");
            char dell[80];
            cin>>dell;
            del(dell,d);
            getchar();
            break;
        }
        case 4:
        {
            system("cls");
            char imb[80];
            cin>>imb;
            if (member(imb,d))
              cout<<"Elem exist"<<endl;
              else
              cout<<"There is no such element"<<endl;
              getchar();
              break;
        }
        case 5:
        {
            system("cls");
            makenull(d);
            cout<<"Hash table is clean now"<<endl;
            getchar();
            break;          }
    }
   }
   return 0;
  
}
вот как выглядит в последней редакции закрытое хеширование

Добавлено через 17 часов 50 минут
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
155
156
157
158
159
160
161
#include <iostream>
#define maxn 10
 
using namespace std;
 
const char *empty="          ";
const char *deleted="**********";
      
int ord(char o)//ïåðåâîä â êîä
{
    return (unsigned char) o;
}
 
int h(char *x)//åñëè Г*ГҐ Г§Г*Г*ГїГІГ®
{
    int sum=0;
    for (int i=0;i<strlen(x);i++)
    sum+=ord(x[i]);
    return sum%maxn;
}
 
int h1(char *x)//
{
    int sum=0;
    for (int i=0;i<strlen(x);i++)
    sum+=ord(x[i]);
    int el=sum%maxn;
    el++;
    return el;
}
    
void makenull(char **d)
{
    for(int i=0;i<maxn;i++)
    strcpy(d[i],empty);
}
 
int locate(char *x,char **d)//ëèáî Г*Г*éäåò ýëåìåГ*ГІ ëèáî äîéäåò äî ГЄГ®Г*Г¶Г* ëèáî
{
    int initial=h(x);
    int i=0;
    while ((i<maxn)&&(strcmp(d[(initial+i)%maxn],x)!=0)&&(strcmp(d[(initial+i)%maxn],empty)!=0))//ГЄГ*ГЄ îïèñГ*ГІГј ñòðîêГ* Г*ГҐ Г°Г*ГўГ*Г*?
        i++;
        return (initial+i)%maxn;
}
 
int locatel(char *x,char **d)//ëèáî Г*Г*éäåò ýëåìåГ*ГІ ëèáî äîéäåò äî ГЄГ®Г*Г¶Г* ëèáî
{
    int initial=h(x);
    int i=0;
    while ((i<maxn)&&(strcmp(d[(initial+i)%maxn],x)!=0)&&(strcmp(d[(initial+i)%maxn],empty)!=0)&&(strcmp(d[(initial+i)%maxn],deleted)!=0))
        i++;
        return (initial+i)%maxn;
}
 
bool  member(char *x,char **d) 
{
  if  (strcmp(A[locate(x)],x)==0) 
     return true; 
  else; 
     return false; 
} 
 
void insert(char x[],char **d) 
 {
  int bucket=0;  
  if  (!(strcmp(d[locate(x)]!=x)) 
   {
    bucket=locatel(x); 
    if  (strcmp(d[bucket],empty)!=0)||(strcmp(d[bucket),deleted)!=0)  then 
    strcpy(d[bucket],x); 
    else
    {
        cout<<"It's full"<<endl;
        break;
    }
   }
 }
 
 void del(char *x,char **d)
 {
  int bucket=locate(x);  
   if (!strcmp(A[locate(x)],x))
      strcpy(a[bucket],deleted);//Г*ГҐ ГіГ¤Г*ëåГ*ГЁГҐ Г* Г§Г*ìåГ*Г* 
 }
 
 void show(dictionary *d)
 {
    while (i<maxn)
    {
        cout<<i<<" ";
        cout<<d[i]<<" ";
        cout<<endl;
    }
 }
            
 
int main()
{
   char dictionary[maxn][100];//ГЄГ*ГЄ îïèñГ*ГІГј ГЅГІГ® ÷åðåç ñòðóêòóðó?
   makenull(dictionary);  
     while(0<1)
   {
    system("cls");
    cout<<"Insert into table-------1"<<endl;
    cout<<"Show table--------------2"<<endl;
    cout<<"Del elem----------------3"<<endl;
    cout<<"Find elem---------------4"<<endl;
    cout<<"Clean-------------------5"<<endl;
    cin>>el;
    switch(el)
    {
        case 1:
        {
            system("cls");
            char emb[80];
            cin>>emb;
            insert(emb,d);
            getchar();
            break;
        }
        case 2:
        {
            system("cls");
            show(d);
            getchar();
            break;
        }
        case 3:
        {
            system("cls");
            char dell[80];
            cin>>dell;
            del(dell,d);
            getchar();
            break;
        }
        case 4:
        {
            system("cls");
            char imb[80];
            cin>>imb;
            if (member(imb,d))
              cout<<"Elem exist"<<endl;
              else
              cout<<"There is no such element"<<endl;
              getchar();
              break;
        }
        case 5:
        {
            system("cls");
            makenull(d);
            cout<<"Hash table is clean now"<<endl;
            getchar();
            break;          }
    }
   }
   return 0;
  
}
не могу понять почему ругается

Добавлено через 4 часа 57 минут

Не по теме:

значит больше не помогут...хех

norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
19.11.2010, 01:19     Указатели на структуры #103
Цитата Сообщение от Artishok Посмотреть сообщение
не могу понять почему ругается
не переживай справимся только выходных подожди, мне самому интересна твоя тема стала, только не когда пока
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
19.11.2010, 01:25  [ТС]     Указатели на структуры #104
Цитата Сообщение от norge_goth Посмотреть сообщение
не переживай справимся только выходных подожди, мне самому интересна твоя тема стала, только не когда пока

Не по теме:

придется завтра на сдаче импровизировать...хах



Добавлено через 1 минуту

Не по теме:

тогда сдам деревья,дек через указатели(через массив не пашет) и открытое хеширование...и за РГР алгоритма Куна-Манкреса хехе



Добавлено через 1 минуту
там наверное ругается из-за неправильно поставленных скобок
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2010, 00:18     Указатели на структуры
Еще ссылки по теме:

C++ Указатели на структуры
C++ Указатели и структуры
C++ Структуры и указатели на структуры

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
21.11.2010, 00:18     Указатели на структуры #105
Цитата Сообщение от accept Посмотреть сообщение
это неправильно, при typedef всегда нужно указывать имя типа, который определяешь, а здесь его нет
C
1
typedef struct spis *dictionary[100];
это правильно, новое имя типа будет называться dictionary
dictionary d; - переменная d, имеющая тип "массив из ста указателей на struct spis"
достаточно передать только имя массива
в данном случае мы определяем синоним к массиву указателей на структуры spis, для того чтобы при
создании подобного массива не описывать заново и пользоваться меткой
C
1
2
3
struct spis *d[100];
//а просто
dictionary d;
я так понимаю чтобы просто сократить запись?
Yandex
Объявления
21.11.2010, 00:18     Указатели на структуры
Ответ Создать тему
Опции темы

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