Μάθημα - Απλά Συνδεδεμένες Λίστες

...ασύγχρονα μαθήματα γλώσσας C

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 19 Ιούλ 2011, 21:44

Συγκεκριμενα προσπαθω να εισαγω ενα στοιχειο στην αρχη της λιστας που πλεον δεν ειναι κενη... αλγοριθμικα εχω καταλαβει απολυτα αυτα που μας εχεις πει αλλα παλι στον κωδικα κατι θα συμβαινει γιατι μου παραγει λογικο λαθος... αντι για 2 1 δηλαδη που ηθελα να βγαλει βγαζει 2 2 1 2

Κώδικας: Επιλογή όλων


/*==========================================================
YLOPOIHSH LISTAS ME SUNARTHSEIS

5/7/11

==========================================================
*/
#include<stdio.h>
#include<stdlib.h>

typedef struct customer /*xreiazetai kai i leksi customer wste na kserei mesa sto swma
tou se ti tupo anaferetai o deiktis next */
{
int id;
struct customer *next;
} Customer;

void list_print(Customer *head);
void list_prepend(Customer **head , int id);

int main ()
{
Customer *head ,*newnode;
int i;

head = NULL;
newnode=NULL;

{
head= calloc(1,sizeof(Customer));
head->id=1;
head->next = NULL;
}

newnode= calloc(1,sizeof(Customer));
newnode->id=2;
newnode->next=NULL;
head->next=newnode;

/*while(head)
{
printf("%d \n\n", head->id);
head=head->next;
}*/

list_prepend(&head,1);
list_prepend(&head,2);

for(i=0; i<1; i++)
{
printf("\n");
list_print(head);

}


free(newnode);
free(head);

return 0;
}
void list_prepend(Customer **head , int id)
{
Customer *newnode= calloc(1,sizeof(Customer));
if(!newnode)
return;

newnode->id=2;
newnode->next=(*head);
(*head)=newnode;
return;
}


void list_print(Customer *head)
{
while(head)
{
printf("%d \n",head->id);
head=head->next;
}
putchar('\n');
return;
}






EDIT: ΕΒγαλα το
Κώδικας: Επιλογή όλων
/*newnode= calloc(1,sizeof(Customer));
newnode->id=2;
newnode->next=NULL;
head->next=newnode; */


οποτε τωρα καπως καλυτερα απλα μου βγαζει 2 2 1 (το πλεονασματικο 2 πρεπει να καταλαβω για ποιο λογο βγαινει)
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 19 Ιούλ 2011, 21:56

οκ το εφτιαξα!!!!

Κώδικας: Επιλογή όλων
/*==========================================================
YLOPOIHSH LISTAS ME SUNARTHSEIS

5/7/11

==========================================================
*/
#include<stdio.h>
#include<stdlib.h>

typedef struct customer /*xreiazetai kai i leksi customer wste na kserei mesa sto swma
tou se ti tupo anaferetai o deiktis next */
{
int id;
struct customer *next;
} Customer;

void list_print(Customer *head);
void list_prepend(Customer **head , int id);

int main ()
{
Customer *head ,*newnode;

head = NULL;
newnode=NULL;

{
head= calloc(1,sizeof(Customer));
head->id=1;
head->next = NULL;
}

list_prepend(&head,2);
list_print(head);

free(newnode);
free(head);

return 0;
}
void list_prepend(Customer **head , int id)
{
Customer *newnode= calloc(1,sizeof(Customer));
if(!newnode)
return;

newnode->id=2;
newnode->next=(*head);
(*head)=newnode;
return;
}


void list_print(Customer *head)
{
while(head)
{
printf("%d \n",head->id);
head=head->next;
}
putchar('\n');
return;
}


Το μπερδεμα γινοταν στις κλησεις των συναρτησεων και στην for που υπηρχε απο πριν ;)
migf1 ειμαι σωστος?????? :D Αντε παμε και στο 4ο τωρα.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 20 Ιούλ 2011, 01:01

Μια χαρά!

Το head δεν χρειάζεται να το κάνεις calloc( ) στην main γιατί η list_prepend() είναι φτιαγμένη να κάνει calloc() μέσα της, οπότε αρκεί απευθείας ένα list_prepend( &list, 1) για να δημιουργηθεί ο 1ος κόμβος της λίστας με την τιμή 1. Υποθέτω το έκανες έτσι απλά για δοκιμαστικούς λόγους, ε;
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 20 Ιούλ 2011, 02:48

migf1 έγραψε:Μια χαρά!

Το head δεν χρειάζεται να το κάνεις calloc( ) στην main γιατί η list_prepend() είναι φτιαγμένη να κάνει calloc() μέσα της, οπότε αρκεί απευθείας ένα list_prepend( &list, 1) για να δημιουργηθεί ο 1ος κόμβος της λίστας με την τιμή 1. Υποθέτω το έκανες έτσι απλά για δοκιμαστικούς λόγους, ε;


Βασικα εκανα αυτο που μου λες... αλλα βγαζει μονο το 2 :S

Οχι δηλαδη το 2 1 . (Οπως σε εσενα που πηγαινε 62 52)

Κώδικας: Επιλογή όλων

/*==========================================================
YLOPOIHSH LISTAS ME SUNARTHSEIS

5/7/11

==========================================================
*/
#include<stdio.h>
#include<stdlib.h>

typedef struct customer /*xreiazetai kai i leksi customer wste na kserei mesa sto swma
tou se ti tupo anaferetai o deiktis next */
{
int id;
struct customer *next;
} Customer;

void list_print(Customer *head);
void list_prepend(Customer **head , int id);

int main ()
{
Customer *head ,*newnode;

head = NULL;
newnode=NULL;

/*{
head= calloc(1,sizeof(Customer));
head->id=1;
head->next = NULL;
} */

list_prepend(&head,1);
list_print(head);

free(newnode);
free(head);

return 0;
}
void list_prepend(Customer **head , int id)
{
Customer *newnode= calloc(1,sizeof(Customer));
if(!newnode)
return;

newnode->id=2;
newnode->next=(*head);
(*head)=newnode;
return;
}


void list_print(Customer *head)
{
while(head)
{
printf("%d \n",head->id);
head=head->next;
}
putchar('\n');
return;
}


οσο για αυτο που ρωτησες ε ναι... τα διαβαζω προσεκτικα πρωτα και μετα προσπαθω να τα κανω εξασκηση...

ουτως η αλλως τον κωδικα τον εχω ετοιμο απο τοτε που πρωτοξεκινουσαμε με τις λιστες ;)
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό clepto » 20 Ιούλ 2011, 03:16

γιατί δεν ανοίγετε καινούργια θέματα με τις συνδεδεμενες λιστες; γιατι εδω που κανεις τον οδηγο migf1 μπορεί αρκετοί να το παραλείψουν και να μην το δουν ενώ το ψάχνουν..
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 20 Ιούλ 2011, 03:26

Σωστο. Αν συμφωνει και ο migf1

Μπορουμε να ζητησουμε απο τον Qdata να τα μεταφερει σε κάποιο καινουργιο νημα. Ή καποιος αλλος συντονιστης.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Qdata » 20 Ιούλ 2011, 14:49

Star_Light έγραψε:Σωστο. Αν συμφωνει και ο migf1

Μπορουμε να ζητησουμε απο τον Qdata να τα μεταφερει σε κάποιο καινουργιο νημα. Ή καποιος αλλος συντονιστης.


Θέλετε να μετακινήσω κάποιες δημοσιεύσεις σε καινούργιο θέμα;Αν ναι πείτε μου ποιες να μετακινήσω και τον τίτλο του νέου θέματος. :)
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό clepto » 20 Ιούλ 2011, 15:13

μετακίνησε τα μέρη του οδηγού για τις συνδεδεμένες λίστες...
και βάλε τίτλο συνδεδεμένες λίστα οδηγός
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Qdata » 20 Ιούλ 2011, 17:19

Να κάνω διαχωρισμό όλων των δημοσιεύσεων από αυτό το post και μετά;
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό clepto » 20 Ιούλ 2011, 17:27

καλό μου ακούγεται :P
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Μαθήματα C

cron