Cur->next->prev=tmp
если Cur - указатель на структурe (курсор)
next - следующий элемент.
prev - предыдущий.
tmp - указатель на структурe
Создание базы данных на Си
Помогите кто-нибудь пожалуйста с созданием базы данных на Си под такую задачу:
База данных деканата содержит информацию о студентах: номер зачетной книжки, ФИО студента (строки 20 символов), группа (строка 5 символов), курс (целое число), средний балл за прошлый семестр (целое число), средний балл за все семестры (целое число). Все баллы – по 10-и бальной системе.
Если можно пришлите помощь на ящик [email]Farior@yandex.ru[/email]
Заранее спасибо
- есть ли у кого нибудь исходник данной программы от dimon_9922, 25 декабря 2013 года
Как задавать вид японял а вот как их накапливать эти списки (или структуры если это одно и тоже)
Цитата:
Originally posted by Farior
А списки и структуры это что разные вещи ?
А списки и структуры это что разные вещи ?
Дейтел
Цитата:
списки - это линейный набор ссылаюихся на себя структур, называемых узлами, и объединненых указателем/и-связкой
книгу заставил в руки взять :).
Цитата:
Originally posted by Farior
Как задавать вид я понял а вот как их накапливать эти списки (или структуры если это одно и тоже)
Как задавать вид я понял а вот как их накапливать эти списки (или структуры если это одно и тоже)
как их накапливать надо бы понять с того примера что я написала
будет время (думаю не раньше чем через 2-3 дня) постараюсь описать все подробно
но попоему легче нормальную книгу в руки взять
Цитата:
Originally posted by _nоrth_
Хорошая книга: http://shop.piter.com/book_about.phtml?id=978546901495&refer=1
в ней описывается реализация двухсвязных списков.
Код можно скачать с http://www.diasoft.kiev.ua/cgi/webshop.cgi?config=/home/www/htdocs/diasoft/cgi/config.txt&uid=Us8WngAA1102333991&command=link--ds_materials_set (TDLnkList.pas)
Хорошая книга: http://shop.piter.com/book_about.phtml?id=978546901495&refer=1
в ней описывается реализация двухсвязных списков.
Код можно скачать с http://www.diasoft.kiev.ua/cgi/webshop.cgi?config=/home/www/htdocs/diasoft/cgi/config.txt&uid=Us8WngAA1102333991&command=link--ds_materials_set (TDLnkList.pas)
в поиске по форуму был?
поищи, трудно поверить что нет примеров
Cur->next->prev=tmp
если Cur - указатель на структурe (курсор)
next - следующий элемент.
prev - предыдущий.
tmp - указатель на структурe
получается установить tmp на место Cur
if (Getrec(flag,Cur)> Getrec(flag,Cur->next))
{tmp=Cur;
if(Cur->next) {Cur=Cur->next;
if(Cur->next) tmp->next=Cur->next; else tmp->next=NULL;
if(Cur->next) Cur->next->prev=tmp;
if(tmp->prev) tmp->prev->next=Cur;
if(tmp->prev) Cur->prev=tmp->prev; else Cur->prev=NULL;
Cur->next=tmp;
tmp->prev=Cur;
if(tmp==Head) Head=Cur;
}numb=1;[COLOR=orangered]
Цитата:
Originally posted by Farior
Как понять :
получается установить tmp на место Cur
Как понять :
Код:
получается установить tmp на место Cur
ты прав, именно так и получается
видно речь идет о том, что бы вставить между
двумя существующими узлами новый/другой узел
делается это изменением значений ячеек prev в нижнем узле
и next в верхнем узле
а temp - указатель на добавляюмую( или речь может идти о сортировке) структуру
что бы тебе было понятней стоит дома попробавать
нарисовать схему обмена и запостить сюда, проверим
нам надо поменять местами узлы Cur и Cur->next.
т.к. речь идет о списках, также мы должны поменять адресса(значения
указателей) узла который находится до кур(тмп->прев->нехт)
исключение: кур первый элемент списка
и кур->прев == NULL,
и узла который находится после кур->нехт(кур->нехт->next)
исключение: кур->next последний элемент списка ==NULL
ну и естественно значения обеих ячеек кур и нехт узлов которые мы меняем местами
Код:
/*если условие сортировки выполняется, тогда меняем местами узлы*/
if (Getrec(flag,Cur) > Getrec(flag,Cur->next))
{
tmp=Cur;/*tmp принимает адрес узла на который указывает указател Cur |=> tmp указывает на ту же структуру*/
if(Cur->next) /*проверяем что в структуре на которую указывает кур ячейка нехт не равна НУЛЛ - т.е. есть еще структура после Кур*/
{
Cur=Cur->next;/*Кур принимает адрес следующей структуры*/
/*тмп смотрит на первую структуру(рассположенную раньше в списке)
кур смотрит на вторую структуру
и эти 2-е структуры надо поменять местами
*/
/*эта проверка в принцепе лишняя: mozno prosto napisat' : tmp->next=Cur->next;
речь идет о том что первая структура(тмп->нехт)
принимает адрес узла на который указывает 2-ая структура(Кур->нехт)
или NULL если 2-ая структура последняя в списке*/
if(Cur->next) tmp->next=Cur->next;
else tmp->next=NULL;
if(Cur->next) Cur->next->prev=tmp;/*если Кур не последний узел в списке,
тогда ячейка прев узла после него(Кур->нехт)
принимает адрес узла tmp*/
if(tmp->prev) tmp->prev->next=Cur;;/*если tmp не первый узел в списке,
тогда ячейка next узла до него(tmp->prev)
принимает адрес узла Cur*/
/*эта проверка в принцепе toze лишняя: mozno prosto napisat' : Cur->prev=tmp->prev;
речь идет о том что, esli структура na kotoruyu ukazyvaet tmp ona ne pervaya v spiske, togda yacheika prev struktury na kotoruyu ukazyvaet Cur, принимает адрес узла на который указывает yacheika(peremennaya) prev 1-oi структура tmp или NULL если 1-ая структура(tmp) pervaya в списке*/
if(tmp->prev) Cur->prev=tmp->prev;
else Cur->prev=NULL;
/*yacheika next struktury na kotoruyu ukazyvaet Cur
prinimaet adres struktury na kotoruyu ukazyvaet tmp*/
Cur->next=tmp;
/*peremennaya prev struktury na kotoruyu ukazyvaet tmp prinimaet adres struktury
na kotoruyu ukazyvaet Cur*/
tmp->prev=Cur;
/*esli tmp ukazyval na pervuyu strukturu v spiske, togda ukazatel' head(on soderzit adres nachala spiska - pervoi struktury v spiske) prinimaet
adres uzla na kotoruj ukazyvaet Cur*/
if(tmp==Head) Head=Cur;
}
numb=1;/*k chemu eto ne ponimayu :)*/
if (Getrec(flag,Cur) > Getrec(flag,Cur->next))
{
tmp=Cur;/*tmp принимает адрес узла на который указывает указател Cur |=> tmp указывает на ту же структуру*/
if(Cur->next) /*проверяем что в структуре на которую указывает кур ячейка нехт не равна НУЛЛ - т.е. есть еще структура после Кур*/
{
Cur=Cur->next;/*Кур принимает адрес следующей структуры*/
/*тмп смотрит на первую структуру(рассположенную раньше в списке)
кур смотрит на вторую структуру
и эти 2-е структуры надо поменять местами
*/
/*эта проверка в принцепе лишняя: mozno prosto napisat' : tmp->next=Cur->next;
речь идет о том что первая структура(тмп->нехт)
принимает адрес узла на который указывает 2-ая структура(Кур->нехт)
или NULL если 2-ая структура последняя в списке*/
if(Cur->next) tmp->next=Cur->next;
else tmp->next=NULL;
if(Cur->next) Cur->next->prev=tmp;/*если Кур не последний узел в списке,
тогда ячейка прев узла после него(Кур->нехт)
принимает адрес узла tmp*/
if(tmp->prev) tmp->prev->next=Cur;;/*если tmp не первый узел в списке,
тогда ячейка next узла до него(tmp->prev)
принимает адрес узла Cur*/
/*эта проверка в принцепе toze лишняя: mozno prosto napisat' : Cur->prev=tmp->prev;
речь идет о том что, esli структура na kotoruyu ukazyvaet tmp ona ne pervaya v spiske, togda yacheika prev struktury na kotoruyu ukazyvaet Cur, принимает адрес узла на который указывает yacheika(peremennaya) prev 1-oi структура tmp или NULL если 1-ая структура(tmp) pervaya в списке*/
if(tmp->prev) Cur->prev=tmp->prev;
else Cur->prev=NULL;
/*yacheika next struktury na kotoruyu ukazyvaet Cur
prinimaet adres struktury na kotoruyu ukazyvaet tmp*/
Cur->next=tmp;
/*peremennaya prev struktury na kotoruyu ukazyvaet tmp prinimaet adres struktury
na kotoruyu ukazyvaet Cur*/
tmp->prev=Cur;
/*esli tmp ukazyval na pervuyu strukturu v spiske, togda ukazatel' head(on soderzit adres nachala spiska - pervoi struktury v spiske) prinimaet
adres uzla na kotoruj ukazyvaet Cur*/
if(tmp==Head) Head=Cur;
}
numb=1;/*k chemu eto ne ponimayu :)*/
esli u tebya est[ polnaya rabotayush'aya programma sbros' syuda pliz, chto by byl primer
вот полностью моя прога (мне ее сделали) вот я и разбираюсь как она работает и сам хочу дойти...
есть ли у кого нибудь исходник данной программы