programski jezik C -> seznam

Cube Član Ubuntu.si
uredil/-a 10. April, 2008 v Programiranje
zdravo,
mam en problem in sicer ustvarim seznam ga napolnim in sedaj bi ga zelu invertirat
primer
1 2 3 4
4 3 2 1

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

typedef struct node
{
int value;
struct node *next;
}
list;
list* root;


list *inverz(list *l){
//funkcija za invert
return l;
}

int main(){
int new_value,i,n;
list *root=NULL;

//vpis
printf(\"Vnesi stevilo vnosov\n\");
scanf(\"%d\",&n);


for(i=0;i<n;i++){
printf(\"Vnesi cifro:\n\");
scanf(\"%d\",&new_value);
if(root==NULL){
root=(list *)malloc(sizeof(list));
root->next=NULL;
root->value=new_value;
}else{
list *r=root;
while(r->next!=NULL)
r=r->next;
r->next=(list *)malloc(sizeof(list));
r->next->next=NULL;
r->next->value=new_value;

}

}

//izpis
list *r=root;
for(i=0;i<n;i++){
printf(\"%d \",r->value);
r=r->next;
}
printf(\"\n\");

//iverz
list *r1=inverz(root);


return 0;
}

studiral sem da zamenjal naslove naslednjega[next], pa mi nikakor ne uspe naredit prav.... core dumped ^^ tako na compu kot v moji glavi :D .

lp,cube

Komentarji

  • napsy Član Ubuntu.si
    nared še en prev pointer v node strukturi
  • Cube Član Ubuntu.si
    uredil/-a 20. April, 2008
    potem to nebi biu vec nacin linearnega seznama?:)

    kaksna druga resitev?

    lp,cube
  • Cube Član Ubuntu.si
    uredil/-a 21. April, 2008
    RESITEV:
     
    #include <stdio.h>
    #include <stdlib.h>

    typedef struct node{
    int value;
    struct node *next;
    }
    list;
    list* root;


    list *inverz(list *l){
    list *ll,*rl;
    int n,i,j;
    ll=l;
    n=0;
    while(ll!=NULL){
    n++;
    ll=ll->next;
    }
    rl=NULL;

    for(i=n-1;i>=0;i--){
    ll=l;
    for(j=0;j<i;j++)
    ll=ll->next;
    if(rl==NULL){
    rl=ll;
    ll->next=NULL;
    }else{
    list *rll;
    rll=rl;
    while(rll->next!=NULL)
    rll=rll->next;
    rll->next=ll;
    ll->next=NULL;
    }
    }

    return rl;
    }

    int main(){
    int new_value,i,n;
    list *root=NULL;

    //vpis
    printf(\"Vnesi stevilo vnosov\n\");
    scanf(\"%d\",&n);


    for(i=0;i<n;i++){
    printf(\"Vnesi cifro:\n\");
    scanf(\"%d\",&new_value);
    if(root==NULL){
    root=(list *)malloc(sizeof(list));
    root->next=NULL;
    root->value=new_value;
    }else{
    list *r=root;
    while(r->next!=NULL)
    r=r->next;
    r->next=(list *)malloc(sizeof(list));
    r->next->next=NULL;
    r->next->value=new_value;

    }

    }

    //izpis
    list *r=root;
    for(i=0;i<n;i++){
    printf(\"%d \",r->value);
    r=r->next;
    }
    printf(\"\n\");

    //iverz
    printf(\"INVERZ:\n\");
    r=inverz(root);

    for(i=0;i<n;i++){
    printf(\"%d \",r->value);
    r=r->next;
    }
    printf(\"\n\");


    return 0;
    }

    lp,cube
Za komentiranje se prijavite ali pa se vpišite.