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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.78
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
#1

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

06.11.2010, 18:20. Просмотров 7954. Ответов 104
Метки нет (Все метки)

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];
такой?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2010, 18:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатели на структуры (C++):

Указатели на структуры - C++
Подскажите в чем ошибка...Дело в том когда я в вожу в каждое поле по 1 значению все нормально выводит,но если при в вводе в поле я пишу два...

Указатели и структуры - C++
Здравия желаю. Подскажите пожалуйста каким образом осуществляется доступ к полю структуры, если оно является указателем?

Структуры и указатели - C++
Задался парой вопросов. Возможно, уже где-то задавались, поэтому прошу прощения заранее. Ниже описана структура для однонаправленного...

Указатели и структуры - C++
Здравствуйте. Подскажите, пожалуйста, почему не меня среда ругается. error C2440: =: невозможно преобразовать "Book *" в...

Структуры и указатели - C++
Привет форумчане, столкнулся вот с такой вот задачкой на структуры: 1. Описать структуру с именем PRICE, содержащую следующие поля: -...

Структуры и указатели на структуры - C++
Так ли я сделал? #include <iostream> struct S { int i; }; void f1(S*s1,int k=0){ s1->i=k;};

104
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.11.2010, 22:49 #31
C++
1
char *s;
0
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
12.11.2010, 23:10  [ТС] #32
кароч завтра буду делать код с нуля без перебивания его с паскаля
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.11.2010, 23:40 #33
попробуй проектировать его сверху-вниз
начинаешь с самых главных функций и постепенно переходишь к вспомогательным (когда все главные уже написаны)
0
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
13.11.2010, 01:55  [ТС] #34
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
#include <iostream.h>
 
#define maxn 100
 
struct spis
{
    char *s;
    struct spis *next;
};
 
typedef struct spis *dict[maxn];
 
//ГЁГ§ ñèìâîëГ* Гў êîä
int transform(char c)
{
    return (int) c;
}
 
 
//õåø-ГґГіГ*êöèÿ
int hashfunc(char *x)
{
    int sum=0;
    for (int i=0;i<strlen(x);i++)
    sum+=transform(x[i]);
    return sum%maxn;
}
 
//ïðîâåðêГ* Г*Г*ëè÷èÿ
bool check(char *x,dict k)
{
    int symb=hashfunc(x);//Г*îìåð Гў ГІГ*áëèöå
    spis *elem=k[symb];//ýëåìåГ*ГІГі ГІГЁГЇГ* spis Г§Г*Г*Г·ГҐГ*ГЁГҐ ãîëîâû Гў Г*îìåðå symb
    while (elem!=0)
    {
        if (elem->s==x)//åñëè Г*Г*éäåГ* ГўГҐГ°Г*ГіГІГј true
         return true;
        else
        elem=elem->next;//ïðîäîëæГ*ГІГј ïîèñê
    }
    return false;
}
 
void insert(char *x,dict k)//ГўГ±ГІГ*âëÿåì Гў ãîëîâó Г±ГЇГЁГ±ГЄГ*
{
    if (!check(x,k))
    {
        //k[res] ГЁ ГҐГ±ГІГј ãîëîâГ* Г±ГЇГЁГ±ГЄГ*
        int res=hashfunc(x);//ГЄГіГ¤Г* ГўГ±ГІГ*âëÿòü Г*îâóþ ñòðîêó
        spis *elem=new spis;//ñîçäГ*ГҐГ¬ Г*îâûé ýëåìåГ*ГІ ГўГ±ГІГ*âëåГ*ГЁГї
        elem->s=x;//Г§Г*ïèñûâГ*ГҐГ¬ Гў Г*ГҐГЈГ® Г¤Г*Г*Г*ûå
        elem->next=k[res];//Г*îâûé ýëåìåГ*ГІ ГіГЄГ*çûâГ*ГҐГІ Г*Г* Г±ГІГ*ðóþ ãîëîâó
        k[res]=elem;//ãîëîâГ* Г*îâûé ýëåìåГ*ГІ
    }
}
 
char del(char *x,dict k)//ГіГ¤Г*ëåГ*ГЁГҐ ýëåìåГ*ГІ ГЁГ§ Г±ГЇГЁГ±ГЄГ*
{
    char ret[8]="no elem";
    char ret1[15]="elemet deleted";
    if (check(x,k))
      return *ret;
      else
      {
        int symb=hashfunc(x);
        if(k[symb]->s==x)//åñëè ýëåìåГ*ГІ ëêГ*Г§Г*ëñÿ ãîëîâîé
         {
            
            spis *cur=k[symb];//ïðèñâîèì Г§Г*Г*Г·ГҐГ*ГЁГҐ ãîëîâû
            k[symb]=k[symb]->next;//ãîëîâГ* ñëåäóþùèé ýëåìåГ*ГІ
            delete cur;//ГіГ¤Г*ëÿåòñÿ ГўГ±ГҐ Г·ГІГ® ñîäåðæГ*Г« Гў Г±ГҐГЎГҐ ýëåìåГ*ГІ(âêëþ÷Г*Гї Г¤Г*Г*Г*ûå)
            return *ret1;
         }
         else
          {
            spis *cur=k[symb];//ïðèñâîèì Г§Г*Г*Г·ГҐГ*ГЁГҐ ãîëîâû ÷òîáû Г* ïîòåðÿòü ГҐВё ГЁГ§ âèäó
            while (cur->next!=0)//ïîêГ* Г*ГҐ ýëåìåГ*ГІ Г± ГіГЄГ*Г§Г*òåëåì Г*Г* 0 ГЁ ГґГ«Г*ГЈ
            {
                if (cur->next->s=x)//åñëè Г*Г*éäåò ýëåìåГ*ГІ Г± ГіГЄГ*Г§Г*òåëåì Г*Г* òîò ýëåìåГ*ГІ êîòîðûé Г*Г*äî ГіГ¤Г*ëèòü
                {
                     spis *tmp=cur->next;//Г§Г*Г*Г·ГҐГ*ГЁГҐ ГіГ¤Г*ëÿåìîãî ýëåìåГ*ГІ
                     cur->next=cur->next->next;//ïðîèãГ*îðèðóåì ГіГ¤Г*ëÿåì ýëåìåГ*ГІ
                     delete tmp;//ГіГ¤Г*ëåГ*ГЁГҐ ГўГ±ГҐГЈГ® Г·ГІГ® Г±ГўГїГ§Г*Г*Г® Г± ïðåäìåòîì(âêëþ÷Г*Гї Г¤Г*Г*Г*ûå Гў Г*ГҐГ¬)
                     return *ret1;
                }
            }
          }
      }
}
 
void clear(dict k)//èçìåГ*ГЁГ« Г*ГҐГ¬Г*îãî ГґГіГ*êöèþ.òîé Г¬Г*ГҐ ïîêГ*Г§Г*ëîñü Г*åäîñòГ*òî÷Г*Г®
{
    for (int i=0;i<maxn;i++)
    {
        if (k[i]!=0)//åñëè Гў Г§Г*Г*Г·ГҐГ*ГЁГЁ ГҐГ±ГІГј õîòü Г·ГІГ®-ГІГ®
        while (k[i]!=0)//ïîêГ* Г*ГҐ 0
        {
            spis *temp=k[i];//ïåðåìåГ*Г*Г*Гї ГіГ¤Г*ëåГ*ГЁГї
            k[i]=k[i]->next;//ïåðåìåùåГ*Г*Г*Гї
            delete k[i];//âû÷èùåГ*ГЁГҐ
        }
    }
        
}
Ну вот что получилось.ну что можно об этом сказать?
кое-что изменил теперь не вылетает с ошибкой

Добавлено через 10 минут
накаркал...теперь вылетает с ошибкой
This application has requested the runtime to terminate it in an unsual way.Please contact the application's support team for more information

могло ли повлиять то что я очистил папку с прогой оставив там только файлы .cpp
там ещё появились файлы .lib. Откуда они взялись?их не было до этого ни разу.были только файлы .o и .exe

Добавлено через 4 минуты
теперь опять стало вылетать с ошибкой
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2010, 02:14 #35
Цитата Сообщение от Artishok
Ну вот что получилось.ну что можно об этом сказать?
лучше вернуть то, что было

C++
1
2
3
4
5
//из символа в код
int transform(char c)
{
        return (int) c;
}
это неправильно
0
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
13.11.2010, 02:19  [ТС] #36
исправил.
но все равно та БОЛЬШАЯ ошибка.
ну а что не так?
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2010, 02:22 #37
что исправил ?
0
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
13.11.2010, 02:27  [ТС] #38
transform

Добавлено через 1 минуту
теперь "стандартная ошибка" появилась

Добавлено через 40 секунд
я изменил функцию очистки т.к. в первом варианте оно только голову удаляло
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2010, 02:28 #39
да у тебя там всё неправильное
тебе говорили, нужно для узла выделять строку, а ты что написал
1
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
13.11.2010, 02:28  [ТС] #40
я изменил функцию очистки т.к. первая обнуляла голову но элементы не удаляла

Добавлено через 30 секунд
вставка почти одинаковая

удалении вообще почти идентично
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2010, 02:31 #41
C++
1
2
        char ret[8]="no elem";
        char ret1[15]="elemet deleted";
вот это вот, это что вообще, это надо удалить
1
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
13.11.2010, 02:35  [ТС] #42
Цитата Сообщение от accept Посмотреть сообщение
вот это вот, это что вообще, это надо удалить
я хотел таким образом завершать процедуру.что бы знать удалился или нет элемент

C++
1
2
3
4
5
6
if (k[res]==0)
        {
        k[res]=new spis;
        k[res]->s=x;
        k[res]->next=0;
        }
для нулевого узла т.е. если его нет это добавить?

Добавлено через 57 секунд

кстати для 3-х буквенного слова прога не вылетает
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2010, 02:40 #43
C++
1
    delete cur;//удаляется все что содержал в себе элемент(включая данные)
вот смотри, вот ты написал, а с чего это ты взял, что данные удалятся вместе с узлом ?
1
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
13.11.2010, 02:41  [ТС] #44
т.к элемент cur включает в себя поля с данными т.е строка удалится
а голова переместится

C++
1
k[]=k[]->next
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2010, 02:42 #45
у тебя была программа почти законченная, ты взял понаписал какой-то лажи

Цитата Сообщение от Artishok
я хотел таким образом завершать процедуру.что бы знать удалился или нет элемент
да, а ты знаешь, что это можно узнать без создания всяких строк
1
13.11.2010, 02:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2010, 02:42
Привет! Вот еще темы с ответами:

Указатели и динамические структуры данных - C++
Задание 1. Дан указатель P1 на вершину стека (если стек пуст, то P1 = nil). Из- влечь из стека все элементы и вывести их...

Указатели и динамические структуры данных - C++
В данный момент занимаюсь изучением динамических структур данных и указателей, и вот вот возник вопрос, есть ли разница изучать эту тему в...

Структуры, содержащие указатели на самих себя - C++
Как вообще возможно существование структур, содержащих указатели на самих себя? struct mystruct{ int a; char ch; ...

список (в программе обнуляются указатели на структуры) - C++
здравствуйте помогите найти ошибку, при возврате указателя на структуру из функции в функцию майн он обнуляется, это меня сбивает с толку...


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru