nightstalker Opublikowano 17 Grudnia 2006 Zgłoś Opublikowano 17 Grudnia 2006 Cześć ! Problem jak w temacie : mam funkcje potrzebne do implementacji listy dwukierunkowej ale nie wiem co teraz z nimi zrobić... Kto pomoże ? #include <stdio.h>struct ListElement{ struct ListElement *next, *prev; int wartosc;}; // ******* ValidatePosition ******* int ValidatePosition(struct ListElement *head, struct ListElement *tail, struct ListElement **p1, int pos) { int i,k; struct ListElement *a; if (pos<0) { return 0; } else { a=head; i=0; k=500; while (k) { if (pos==i) { *p1=a; return 1; } else { if ((a->next)!=NULL) { a=a->next; i++; } else { return 0; } } } } } // ******* addBegin ******* void addBegin(struct ListElement **head,struct ListElement **tail, int value) { struct ListElement *a; a =(struct ListElement*)malloc(sizeof(struct ListElement)); a->wartosc = value; if ((*head)==NULL && (*tail)==NULL) { *head=a; *tail=a; a->next=NULL; a->prev=NULL; } else { a->next=*head; a->prev=NULL; (*head)->prev=a; (*head)=a; } } // ******* addEnd ******* void addEnd(struct ListElement **head,struct ListElement **tail, int value) { struct ListElement *a; a =(struct ListElement*)malloc(sizeof(struct ListElement)); a->wartosc = value; if ((*head)==NULL && (*tail)==NULL) { *head=a; *tail=a; a->next=NULL; a->prev=NULL; } else { a->prev = *tail; a->next = NULL; (*tail)->next = a; (*tail)=a; } } // ******* addMiddle ******* void addMiddle(struct ListElement **head, struct ListElement **tail, int value, int pos) { int m; struct ListElement *a,*b; a =(struct ListElement*)malloc(sizeof(struct ListElement)); if (pos == 0) { addBegin(head,tail,value); } else { if (ValidatePosition(*head,*tail,&b,pos)) { if ((b->next)=NULL) { addEnd(head,tail,value); } else { a->prev=b->prev; a->next=b; (b->prev)->next=a; b->prev=a; a->wartosc=value; } } } } // ******* deleteBegin ******* void deleteBegin(struct ListElement **head,struct ListElement **tail) { struct ListElement *a; if ((*head)!=NULL) { if ((*tail)==(*head)) { *tail=NULL; free(*head); *head=NULL; } else { a=(*head)->next; (*head)->next->prev=NULL; free(*head); *head=a; } } } // ******* deleteEnd ******* void deleteEnd(struct ListElement **head,struct ListElement **tail) { struct ListElement *a; if ((*tail)!=NULL) { if ((*tail)==(*head)) { *tail=NULL; free(*head); *head=NULL; } else { a=(*tail)->prev; a->next=NULL; free(*tail); *tail=a; }; } } // ******* deleteMiddle ******* void deleteMiddle(struct ListElement **head, struct ListElement **tail, int pos) { struct ListElement *a; if (pos==0) { deleteBegin(head,tail); } else if (ValidatePosition(*head,*tail,&a,pos)) { if (a->next==NULL) { deleteEnd(head,tail); } else { a->prev->next=a->next; a->next->prev=a->prev; free(a); } } } int main() { return 0;} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Haquim Opublikowano 17 Grudnia 2006 Zgłoś Opublikowano 17 Grudnia 2006 1)http://wielebnyk.republika.pl/article00016.htm A nie prościej użyć STLA-a 2)A co ma robić ten program ? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
nightstalker Opublikowano 17 Grudnia 2006 Zgłoś Opublikowano 17 Grudnia 2006 1) Pisze w C nie w C++ czy C#, obiektowa implementacja sie nie przyda. 2) No tak, ale na laborkach nie mozemy. 3) Program ma byc odwzorowaniem innego programu który pisze w ramach innych zajęć. W tamtym programie mam delphi, tablice rekordów i wszystko gra, ale prowadzący wymyslił sobie żeby w ramach ćwiczeń napisać to w czystym C ( dobrze że z WinApi dał sobie spokój... ) No i tu sie pojawia problem, bo jako programista php5, obiektowego delphi i bardziej cpp niz c nie radze sobie z tymi wszystkimi mallocami i wskaźnikami... Tak naprawde to ejszcze nie siadlem dobrze do tego programu, bo mam co innego na głowie, ale jeśli jest tu jakaś dobra uczynna dusza pisząca w czystym C to bardzo prosze o pomoc. Ps. Tak zupełnie przy okazji, czy moze ktoś sprawdzić czy dobrze rozwiązałem problem mnożenia macierzy o różnych rozmiarach ? Tu link do kodu: http://phpfi.com/185704 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Haquim Opublikowano 18 Grudnia 2006 Zgłoś Opublikowano 18 Grudnia 2006 (edytowane) Ps. Tak zupełnie przy okazji, czy moze ktoś sprawdzić czy dobrze rozwiązałem problem mnożenia macierzy o różnych rozmiarach ? Tu link do kodu: http://phpfi.com/185704 //zakłądam ża X to liczba kolumn a Y to liczba wierszy to : CiSizeX=AiSizeY; CiSizeY=BiSizeX; CiSizeY=AiSizeY; CiSizeX=BiSizeX; dTable3=(int**)calloc(CiSizeX, sizeof(int*)); for (iVar0=0;iVar0<CiSizeX;iVar0++) dTable3[iVar0] = (int*)calloc(CiSizeY,sizeof(int)); for (iVar0=0;iVar0<CiSizeY;iVar0++){ for (iVar1=0;iVar1<CiSizeX;iVar1++){ temp = 0; for (iVar3=0;iVar3<AiSizeX;iVar3++){ temp = temp + ( dTable1[iVar3][iVar1] * dTable2[iVar0][iVar3]); } dTable3[iVar0][iVar1] = temp; } } 1) używaj wcięć to pomaga w czytaniu ;) 2)Nie zgadzają się wymiary Edytowane 18 Grudnia 2006 przez Haquim Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
nightstalker Opublikowano 19 Grudnia 2006 Zgłoś Opublikowano 19 Grudnia 2006 O, dzięki! Wlasnie coś mi sie nie podobaly te wymiary... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
The_Structor Opublikowano 19 Grudnia 2006 Zgłoś Opublikowano 19 Grudnia 2006 http://black007_pl.republika.pl/files/Clist.pdf Tutaj zajrzyj. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...