Avatar billede nicklasw Nybegynder
14. juni 2010 - 17:55 Der er 9 kommentarer og
1 løsning

Linked list bliver ikke oprette korrekt

Hej eksperter.
Jeg har oprettet en funktion til at oprette en linked list, som så retunere en pointer til det første element i listen.

funktionen modtager et char array, hvor det er meningen den skal lave et element ud fra hvert bogstav som den holder i char data og tælle hvor mange gange det bliver brugt som den holder i int freq.

Problemet er at den ikke tæller rigtig. og jeg kan ikke gennemskue hvorfor.

Tak for hjælpen på forhånd

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

#define true 1
#define false 0;

typedef char bool;
typedef char byte;
typedef struct internalNode *internalNodePrt;
typedef struct childNode *childNodePrt;

typedef struct internalNode{
    internalNodePrt parent;
   
    childNodePrt child_0;
    childNodePrt child_1;
   
    int freq;
} internalNode;

typedef struct childNode{
    internalNodePrt parent;
   
    childNodePrt link;
   
    int freq;
    byte data;
} childNode;


childNodePrt creatDataList(char *data)
{
    childNodePrt first = malloc(sizeof(childNode));
    first->data = data[0];
    first->freq = 0;
    first->link = NULL;

    for(int i = 0; i<sizeof(data); i++)
    {
        bool creatNewChild = true;
       
        childNodePrt pointer = first;
        while(1)
        {
            if(pointer->data == data[i])
            {
                pointer->freq++;
                creatNewChild = false;
                break;
            }
           
            if(pointer->link == NULL)
            {
                break;
            }else{
                pointer = pointer->link;
            }
        }
       
        if(creatNewChild)
        {
            childNodePrt newChild_temp = malloc(sizeof(childNode));
            newChild_temp->data = data[i];
            newChild_temp->freq = 1;
            newChild_temp->link = NULL;
            pointer->link = newChild_temp;
            pointer = pointer->link;
        }
    }
   
    //return sortChildren(first);
    return first;
}


int main (int argc, const char * argv[]) {
   
    childNodePrt list = creatDataList("hhhjhhhhhh hhh");
   
   
    printf("bogstav: %c antal: %d\n",list->link->data,list->link->freq);
    return 0;
}
Avatar billede nicklasw Nybegynder
14. juni 2010 - 19:21 #1
Efter lidt testing virker det som om det går galt når den kommer til et mellemrum tegn, men jeg er ikke sikker.
Avatar billede arne_v Ekspert
15. juni 2010 - 01:06 #2
Koden er gal.

childNodePrt creatDataList(char *data)
{
...
    for(int i = 0; i<sizeof(data); i++)
...
    childNodePrt list = creatDataList("hhhjhhhhhh hhh");

sizeof(data) returnerer stoerrelsen paa en pointer typisk 4 eller 8.

Jeg antager at du vil have laengden af input strengen.

Den faar du med strlen(data).
Avatar billede arne_v Ekspert
15. juni 2010 - 01:08 #3
Og saa forstaar jeg ikke hvorfor du har to forskellige structs.
Avatar billede nicklasw Nybegynder
15. juni 2010 - 14:42 #4
Den anden struct skal bruges til noget andet senere... er ved at prøve at lave noget huffman algortime komprimering.

Ja det virker. men senere hen skal den måske bruges til andet end tekst, vil det så også virker? jeg vil egentlig bare gerne vide hvor mange bytes pointeren peger på.


Men du må gerne lige et svar.
Avatar billede arne_v Ekspert
15. juni 2010 - 15:16 #5
strlen taeller antal char's indtil foerste nul byte.

(og "bla bla" er nul terminerede i C)
Avatar billede arne_v Ekspert
15. juni 2010 - 15:17 #6
Og svar
Avatar billede arne_v Ekspert
15. juni 2010 - 15:17 #7
Hvorfor Huffman og ikke aritmetisk encoding?
Avatar billede nicklasw Nybegynder
15. juni 2010 - 15:32 #8
Jeg har sommerferie og det bare for sjov, og så var huffman det første jeg støtte på...

Er grunden til at sizeof ikke fungere, er det fordi at det er en compile time funktion. Og derfor kan den kun bruges når det er et statisk givet array?
Avatar billede arne_v Ekspert
15. juni 2010 - 15:36 #9
Delvist.

Det er compile time. Og sprogets syntax siger at sizeof paa en pointer returnerer size af pointer ikke size af data.
Avatar billede nicklasw Nybegynder
15. juni 2010 - 15:41 #10
aah okay, tak for hjælpen... Vender nok tilbage ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester