Après presque 3 ans, j'ai commencé à réapprendre C
.Créer une liste chaînée triée
J'ai créé un Linked list
, et j'aimerais l'étendre à la création d'une liste chaînée triée. Voici mon code:
typedef struct node{
int data;
struct node *ptr;
}node;
node* insert(node* head, int num){
node *temp,*prev,*next;
temp = (node*)malloc(sizeof(node));
temp->data = num;
temp->ptr = '\0';
if(head=='\0'){
head=temp;
}else{
next = head;
prev = next;
while(next->data<=num){
prev = next;
next = next->ptr;
}
if(next==NULL){
prev->ptr = temp;
}else{
temp->ptr = prev->ptr;
prev-> ptr = temp;
}
}
return head;
}
void main(){
int num;
node *head, *p;
head = '\0';
do{
printf("Enter a number");
scanf("%d",&num);
if(num!=0)
head = insert(head,num);
}while(num!=0);
p = head;
printf("\nThe numbers are:\n");
while(p!='\0'){
printf("%d ",p->data);
p = p->ptr;
}
}
Ceci est mon idée. Je traverse la liste jusqu'à ce que je trouve un numéro >=
l'entrée. Je stocke le nœud précédent dans prev
et le nœud next
contient la valeur actuelle. Si next est null
, alors la liste est terminée et le numéro est le plus élevé parmi la liste, donc il doit être inséré à la dernière place, si le nombre est quelque part où au milieu, la partie d'adresse du noeud précédent est stockée dans les noeuds temporaires partie de l'adresse maintenant pointeur de noeud temp détient l'adresse du noeud suivant.
Modifier: Problème avec mon code si j'entre 1,2 J'obtiens un message d'erreur comme a.exe has stopped working
. J'utilise MinGW pour la compilation. Je romps la boucle lorsque les entrées utilisateur 0.
''\ 0'' n'est pas la même chose que NULL. http://stackoverflow.com/questions/1296843/what-is-the-difference-between-null-0-and-0 – mohit
@mohit, ''\ 0'' fonctionnera exactement comme' NULL'. Ce n'est pas vraiment significatif sur le plan sémantique, mais ça devrait aller. –