[C] tablice, wskaźniki, listy incydencji

Wievior
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 27 kwie 2009, o 22:17
Płeć: Mężczyzna

[C] tablice, wskaźniki, listy incydencji

Post autor: Wievior »

Witam,

Mam taki oto kod:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>

#define ROZMIAR_TABLICY 4

struct lista
	{
	float odleglosc;
	int numer1;
	int numer2;
	struct lista* dalej;
	};

typedef struct lista* Lista;

void przerzuc(float tablica[ROZMIAR_TABLICY][ROZMIAR_TABLICY], Lista* list)
	{
	int i,j;
	for(i=0; i<ROZMIAR_TABLICY; i++)
		{
		for(j=0; j<ROZMIAR_TABLICY; j++)
			{
			if (i != j && tablica[i][j] != -1)
				{
				Lista temp = (Lista) malloc(sizeof(struct lista));
				temp -> odleglosc = tablica[i][j];
				temp -> numer1 = i;
				temp -> numer2 = j;
				temp -> dalej = *list;
				*list = temp;
				}
			}
		}
	}

void wczytaj(float tablica[ROZMIAR_TABLICY][ROZMIAR_TABLICY])
	{
	int i,j;
	for(i=0; i<ROZMIAR_TABLICY; i++)
		{
		for(j=0; j<ROZMIAR_TABLICY; j++)
			{
			if (i != j)
				{
				printf("Podaj odleglosc od %d do %d: ", i,j);
				scanf("%f", &tablica[i][j]);
				}
			}
		}
	}
	
void druk(Lista lista)
	{
	while (lista != NULL) // dopoki nie natrafimy na wskaznik na null/nic
		{
		printf("odleglosc z %d do %d: %f
", lista -> numer1, lista -> numer2, lista -> odleglosc);
		lista = lista -> dalej; // zapisujemy do lista wskaznik na nastepny element
		}
	}

int main()
	{
	float tablica[ROZMIAR_TABLICY][ROZMIAR_TABLICY];
	Lista lista = NULL;
	wczytaj(tablica);
	printf("
");
	przerzuc(tablica, &lista);
	druk(lista);
	return 0;
	}
Funkcja przerzuc() leci przez podaną w pierwszym argumencie tablice i tworzy listę incydencji. No i wszystko działa, wydaje się że jest ok. Tyle tylko, że przy ROZMIAR_TABLICY=4 powinienem mieć cztery listy incydencji (po jednej dla każdego i), a nie jedną z wszystkim.

I teraz właśnie nie wiem jak stworzyć taką tablicę list ze wskaźnikami. Proszę o pomoc ;]
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

[C] tablice, wskaźniki, listy incydencji

Post autor: spajder »

Normalnie tak to się zapisuje (tak jak mówisz), ale tutaj w strukturze masz pola numer1 i numer2 i one zawierają pełną informację, więc można to przechowywać w jednej liście. Natomiast przeglądanie takiej listy będzie dość powolne.
Wievior
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 27 kwie 2009, o 22:17
Płeć: Mężczyzna

[C] tablice, wskaźniki, listy incydencji

Post autor: Wievior »

Właśnie o to chodzi, że tymczasowo mam tak, bo inaczej nie potrafię zrobić. W strukturze chciałbym mieć tylko pole numer, w którym zapisywałbym j.
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

[C] tablice, wskaźniki, listy incydencji

Post autor: spajder »

Zrób listę, której elementami są takie właśnie listy.
ODPOWIEDZ