J'ai un problème lors de l'insertion d'une chaîne dans la position correcte (insertion du tri) dans la liste chaînée. Quand j'ajoute quelques positions dans la liste liée et termine le programme en tapant '0', le programme me montre seulement la première position. Aussi j'ai des doutes sur "(strcmp (tmp-> ch, nouveau-> ch)> 0)" ça marche comme je suis en train de penser? (Comparez le nouvel élément avec le courant (je veux dire qu'il devrait être '>' ou ' < ')). Je serai vraiment reconnaissant pour tous les conseils;) est mon code .Il:insertion d'un nouvel élément dans la liste chaînée avec tri C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_L 30
typedef struct elem{
char ch[MAX_L];
struct elem *next;
struct elem *prev;
} list_elem;
void add_to_list (list_elem *first, char ch[MAX_L])
{
list_elem *new=(list_elem*)malloc(sizeof(list_elem));
strcpy(new->ch, ch);
list_elem *tmp=first;
do
{
if(tmp->next==NULL)
{
tmp->next=new;
new->prev=tmp;
new->next=NULL;
}
if (strcmp(tmp->ch,new->ch)>0) //guess here should be inserted new element
{
new->prev=tmp->prev;
new->next=tmp;
tmp->prev=new;
}
else
tmp=tmp->next;
}while (tmp->next!=NULL);
}
void print_list(list_elem *first)
{
first=first->next;
if(first->ch==NULL)
printf("lista jest pusta!!\n");
while(first->next!=NULL){
printf("%s\n",first->ch);
first=first->next;}
printf("%s\n",first->ch);
}
int main()
{
list_elem *first=(list_elem*)calloc(1,sizeof(list_elem));
first->next=NULL;
first->prev=NULL;
char a;
char ch[MAX_L];
printf("write ' 0 ' to end program.\n");
printf("write smth to add it to list: \n");
while(ch[0]!='0'){
scanf("%s",&ch);
add_to_list(first,ch);}
print_list(first);
return 0;
}
Indice 1: Que se passe-t-il après l'insertion au milieu de la liste chaînée? Astuce 2: Activez tous les avertissements du compilateur. Si vous utilisez gcc, assurez-vous de mettre -Wall –