Янус
|
|
« Ответ #30 : 17-01-2009 21:36 » |
|
int.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #31 : 17-01-2009 21:53 » |
|
вообще непонятно, что ты тут делаешь int a1=int(temp->a); TempArray[i]=a1;///!!!!!
если тебе нужно следать то и тип массива должен быть int*
|
|
« Последнее редактирование: 17-01-2009 22:03 от Алексей1153++ »
|
Записан
|
|
|
|
Янус
|
|
« Ответ #32 : 17-01-2009 22:00 » |
|
Так пытаюсь сделать его int. Тоже не идет...
element** TempArray=new int [5]; на эту строчку ругается...
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #33 : 17-01-2009 22:05 » |
|
эхъ... Зачем пытаться его делать int ? Сделай как у меня в посте #26 было написано, и всё. Останется только тип data описать и сортировку массива указателей на него
|
|
|
Записан
|
|
|
|
Янус
|
|
« Ответ #34 : 17-01-2009 22:09 » |
|
так я все так и сделал, а тип Data он же " какие то данные" у меня int.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #35 : 17-01-2009 22:11 » |
|
|
|
|
Записан
|
|
|
|
Янус
|
|
« Ответ #36 : 17-01-2009 22:19 » |
|
Господа правильно ли я восприня предложенную здесь идею насчет временного массива ? #include "stdafx.h" #include <iostream> using namespace std; struct data { int a; data *next;
}; data *first=0; data *cur=0; int isempy() { return first==NULL; } void Add(int a1) { data *temp=new data; temp->a=a1; temp->next=first; first=temp; } void vvod(int b) { int a; for(int i=0;i<b;i++) { cout<<"a="; cin>>a; Add(a); } } void print() { data* temp=first;
while (temp!=0) {
cout<<temp->a<<"->";
temp=temp->next; }
cout<<endl; } void sift(int *arrays,int L, int R) { int i,j; int item; i=L; j=2*L; item=arrays[L]; if(j<R && arrays[j]<arrays[j+1]) j++; while (j<=R && item < arrays[j]) { arrays[i]=arrays[j]; i=j; j=2*j; if(j<R && arrays[j]<arrays[j+1]) j++; } arrays[i]=item; } void heapsort(int *arrays,int size) { int L,R; int item; L=size/2; R=size-1; while (L>0) { L--; sift(arrays,L,R); } while(R>0) { item=arrays[0]; arrays[0]=arrays[R]; arrays[R]=item; R--; sift(arrays,L,R); } }
int _tmain(int argc, _TCHAR* argv[]) { int b; cout<<"Enter quantity elements of spisok"; cin>>b; vvod(b); print(); //tempmassiv(b); int *arrays; arrays=new int [b]; data* temp=first; for(int i=0;temp && i <b;i++) { arrays[i]=temp->a; temp=temp->next;
}
heapsort(arrays,b); for(int i=0;temp && i<b;i++) { temp->a=arrays[i]; temp=temp->next; } cout << "Your array after sorting"; for(int i=0;i<b;i++) { cout << arrays[i]; } print(); return 0; }
Если да то возникает следующий вопрос: сортируем то мы опять значения а не ссылки, а потом готовый массв просто расталкиваем по возрастанию по ссылкам... Или я что-то не так воспринял ? (Программа хоть и выглядит ужасно но рабочая.)
|
|
« Последнее редактирование: 18-01-2009 01:36 от Янус »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #37 : 18-01-2009 06:27 » |
|
Янус, во первых, ты не освободил память динамического массива, во вторых struct data { int a; data *next; //это тут зачем ? Это же должно быть в элементе списка!
};
у тебя получился частный случай, который будет трудно развивать (если в данные придётся ещё что то добавить) в третьих, data *first=0; data *cur=0; - зачем они у тебя глобальные то ? в четвёртых, форматирование кода надо тренировать )
|
|
« Последнее редактирование: 18-01-2009 06:29 от Алексей1153++ »
|
Записан
|
|
|
|
Янус
|
|
« Ответ #38 : 18-01-2009 12:04 » |
|
С кодом то все ясно (онписался в 5 утра) подправить его соответственно можно, но вот идея мне кажется не совсем та. Опять сортируем и меняем местами, информационную часть структуры, а не ссылки
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #39 : 18-01-2009 12:36 » |
|
Янус, это потому что ты не читаешь, что тебе пишут я вот вообще у тебя не вижу struct ListNode { struct Data *data; struct ListNode *next; };
|
|
|
Записан
|
|
|
|
Янус
|
|
« Ответ #40 : 18-01-2009 12:54 » |
|
Не хочется показатся тупым, но все же возникает следующий вопрос: в массив то мы загоняем int (т.е. данные из структуры Data) и ЕГО сортируем... Вот что меня смущает. Если создавать массив как указано в Вашем посте то это не прокатывает(создаем массив для типа данных Data, а запихнуть туда пытаемся int).Если я не прав то пните меня в нужную сторону .
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #41 : 18-01-2009 13:07 » |
|
Янус, int загоняешь ты, а у меня в примере был указатель на данные
|
|
|
Записан
|
|
|
|
Янус
|
|
« Ответ #42 : 18-01-2009 13:19 » |
|
да признаю немного туповат.... Но если можно окажите пошаговую помощь. Создаем структуру и елементы списка: struct data { int a; }; struct ListNode { struct data *data; struct ListNode *next; struct ListNode *first; };
Так правильно ?
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #43 : 18-01-2009 13:46 » |
|
Янус, это синтаксис C, в C++ не надо писать struct при объявлении переменных. Читай внимательней. Идентификатор типа не должен совпадать с идентификатором переменной.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #44 : 18-01-2009 17:48 » |
|
Янус, первый шаг //структура, содержащая некие данные struct s_Data { int m_a; };
//структура узла списка struct s_ListNode { s_ListNode* m_pPrev_nz;//указатель на предыдущий узел (если не 0) s_ListNode* m_pNext_nz;//указатель на следующий узел (если не 0)
s_Data* m_pData;//указатель на экземпляр данных, связанный с этим узлом
s_ListNode() : m_pPrev_nz(0), m_pNext_nz(0), m_pData(0) { } };
|
|
« Последнее редактирование: 18-01-2009 17:50 от Алексей1153++ »
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #45 : 19-01-2009 06:22 » |
|
Алексей1153++, лучше писать не 0, а NULL.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #46 : 19-01-2009 08:21 » |
|
да это кто как привык ) Лично мне нравится 0
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #47 : 19-01-2009 09:43 » |
|
Алексей1153++, это я знаю. Я говорю, что семантически (для читабельности кода) лучше писать NULL. Особенно это касается начинающих в программировании, которые путаются в типах данных.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #48 : 19-01-2009 10:12 » |
|
dimka, можно подумать, они уже не путают 0 и NULL И легко напишут int i=NULL; особого смысла в этом не вижу. И вряд ли кто то переопределит NULL (это я про разработчиков). Ну а путаться в "тип" и "указатель на тип" - это случай такой, что надо сразу это нагонять...
|
|
« Последнее редактирование: 19-01-2009 10:18 от Алексей1153++ »
|
Записан
|
|
|
|
|