Skocz do zawartości
nightstalker

Lista Dwukierunkowa W C

Rekomendowane odpowiedzi

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;}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez Haquim

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...