вот код, который обещал выложить. это описание списка, который содержит еще один список.
<<< cut begin >>>
typedef struct data_define {
char * templ;
char * descr;
} Data;
typedef struct Nod_define {
Data data;
struct Nod_define * next;
} Nod;
typedef struct Spisok_define {
Nod * start, *current;
char * Name;
char * FileName;
char * Template;
unsigned long Count;
} Spisok;
/*
* TEMPLATE LIST
*/
typedef struct Template_data_define {
Spisok * List;
} Template_Data;
typedef struct Template_Nod_define {
Template_Data data;
struct Template_Nod_define * next;
} Template_Nod;
typedef struct Template_Spisok_define {
Template_Nod * start, *current;
unsigned long Count;
} Template_Spisok;
void Init_Spisok(Spisok *L);
unsigned int Spisok_Add(Spisok *L, Data *dt);
Data * Spisok_Get(Spisok *L, unsigned int z);
void Spisok_Delete(Spisok *L,unsigned int z);
void Init_Template_Spisok(Template_Spisok *L);
unsigned int Template_Spisok_Add(Template_Spisok *L, Template_Data *dt);
Template_Data * Template_Spisok_Get(Template_Spisok *L, unsigned int z);
void Template_Spisok_Delete(Template_Spisok *L,unsigned int z);
void Init_Spisok(Spisok *L)
{
L->start = L->current = NULL;
L->Count = 0;
};
unsigned int Spisok_Add(Spisok *L, Data *dt)
{
Nod * p;
if (!(p = (Nod *) malloc(sizeof(Nod))))
return RES_FALSE;
p->data = *dt;
p->next = NULL;
if(!L->start)
L->start = L->current = p;
else
L->current = L->current->next = p;
L->Count++;
return RES_TRUE;
};
Data * Spisok_Get(Spisok *L, unsigned int z)
{
unsigned int i;
Nod * t;
t = L->start;
for(i=0;i<z;i++) {
if(t->next)
t = t->next;
else
return &(t->data);
}
return &(t->data);
};
void Spisok_Delete(Spisok *L,unsigned int z)
{
unsigned int i;
Nod *t,*p;
if (L->Count == 0)
return;
if( z == 0 || L->Count == 1) {
p = L->start;
L->start = L->start->next;
free(p);
}
else {
t = L->start;
for (i=0;i<(z-1);i++)
if (t->next->next)
t = t->next;
p = t->next;
if (!t->next->next)
L->current = t;
t->next = t->next->next;
free(p);
}
if (L->Count)
L->Count--;
};
void Init_Template_Spisok(Template_Spisok *L)
{
L->start = L->current = NULL;
L->Count = 0;
};
unsigned int Template_Spisok_Add(Template_Spisok *L, Template_Data *dt)
{
Template_Nod * p;
if (!(p = (Template_Nod *) malloc(sizeof(Template_Nod))))
return RES_FALSE;
p->data = *dt;
p->next = NULL;
if(!L->start)
L->start = L->current = p;
else
L->current = L->current->next = p;
L->Count++;
return RES_TRUE;
};
Template_Data * Template_Spisok_Get(Template_Spisok *L, unsigned int z)
{
unsigned int i;
Template_Nod * t;
t = L->start;
for(i=0;i<z;i++) {
if(t->next)
t = t->next;
else
return &(t->data);
}
return &(t->data);
};
void Template_Spisok_Delete(Template_Spisok *L,unsigned int z)
{
unsigned int i;
Template_Nod *t,*p;
if (L->Count == 0)
return;
if( z == 0 || L->Count == 1) {
p = L->start;
L->start = L->start->next;
free(p);
}
else {
t = L->start;
for (i=0;i<(z-1);i++)
if (t->next->next)
t = t->next;
p = t->next;
if (!t->next->next)
L->current = t;
t->next = t->next->next;
free(p);
}
if (L->Count)
L->Count--;
};
<<< cut end >>>
Пример работы со списком:
char * find_templ_decr(char * templ)
{
unsigned int i,k;
unsigned int find = 0;
char * result = NULL;
Spisok * Ls;
Data * Dt;
Template_Data * TMPDt;
for (i=0;i<TMPS.Count && !find;i++) {
TMPDt = Template_Spisok_Get(&TMPS,i);
Ls = TMPDt.List;
if (strcmp(Ls->Name, cfg_mode.type_os) == 0)
for (k=0;k<Ls->Count && !find;k++) {
Dt = Spisok_Get(Ls,k);
if (strcmp(Dt.templ, templ) == 0) {
result = (char *)strdup(Dt->descr);
find = 1;
goto end_search;
}
}
}
end_search:
return result;
};
<<< cut end >>>
Больше спасибо тому, кто взглянет на код, и выскажет свои мысли.
Ведь где-то там ошибка !
Ответ на:
комментарий
от Reset
Ответ на:
комментарий
от nial
Ответ на:
комментарий
от sS
Ответ на:
комментарий
от sS
Ответ на:
комментарий
от nial
Ответ на:
комментарий
от sS
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Насколько это легально? (2016)
- Форум Ошибка в коде... (2006)
- Форум Код ядра (сетевая подсистема) (2005)
- Форум не компилится код (2010)
- Форум не понял что написал на c++ (2019)
- Форум Вывести содержание бинарного файла (2013)
- Форум Глюк GCC? (2010)
- Форум Чем чревата прямая инкапусляция структур в си? (2016)
- Форум класс list в c++ (2015)
- Форум Соединится с сервером по сокету? (2020)