Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Kompleks Datastruktur | Avansert Bruk av Struct
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Mestre C-strukturer

bookKompleks Datastruktur

Datastrukturer gjør det mulig for programmerere å lagre, organisere og håndtere data på en effektiv måte. Enkle arrayer eller sekvensiell lagring er ofte ikke tilstrekkelig for komplekse oppgaver, og derfor benyttes strukturer som lister, trær og hashtabeller.

I C gir strukturer (struct) en fleksibel måte å implementere mange av disse datastrukturene på.

Lenket liste

En lenket liste er nyttig når antall elementer kan endres dynamisk. Hver node inneholder data og en peker til neste node.

Eksempel på nodestruktur:

struct Node {
    int data;           // data in node
    struct Node* next;  // pointer to next node
};

Hver node inneholder et data-felt og en next-peker. Dette gjør det mulig å legge til eller fjerne elementer hvor som helst i listen uten å måtte omorganisere hele strukturen, i motsetning til med arrayer.

Hash-tabell

Hash-tabeller gir mulighet for raskt oppslag av data ved hjelp av en nøkkel. En hash-funksjon konverterer nøkkelen til en indeks i et array, hvor verdien lagres.

Eksempel på implementering av hashtabell:

struct Node {
    char* key;          // key
    int value;          // value
    struct Node* next;  // pointer to next node
};

struct HashTable {
    struct Node** table; // array of node pointers
    int size;            // table size
};

unsigned int hashFunction(char* key, int size) {
    unsigned int hash = 0;
    while (*key) {
        hash += *key++;
    }
    return hash % size;
}

Hvert element i hashtabellen er en lenket liste-node som inneholder en nøkkel og en verdi. Hashfunksjonen konverterer nøkkelen til en tabellindeks, noe som gir raske oppslag selv med store datasett.

Trær

Trær er nyttige for hierarkiske data, raskt søk, innsetting og sletting.

Et binært tre er et tre der hver node har maksimalt to barn: venstre og høyre.

Et eksempel på implementering av et binært tre:

struct node
{
	int data;
	struct node* left; 
	struct node* right; 
};

En node kan være forelder til sine barn samtidig som den er barn av sin forelder. Binære trær gir effektiv dataorganisering og raskt søk på grunn av deres logiske "venstre-høyre"-struktur.

Stack

Brukes til å modellere nettverk og relasjoner.

En stack er en datastruktur der elementer legges til (push) og fjernes (pop) i henhold til LIFO-prinsippet - (Last In, First Out).

Eksempel på stack ved bruk av array:

// Stack structure
typedef struct {
    int data[MAX_SIZE]; 
    int top;
} Stack;

MAX_SIZE - the maximum number of elements a stack can contain.

// Push an element onto the stack
void push(Stack *stack, int value) {
    stack->data[++stack->top] = value;  // Increment top and add the element
    printf("Element %d pushed onto the stack\n", value);
}

// Pop an element from the stack
int pop(Stack *stack) {
    int value = stack->data[stack->top--];  // Retrieve the element and decrement top
    printf("Element %d popped from the stack\n", value);
    return value;
}

Elementet legges til øverst i stabelen (top). Stabler gir rask innsetting og fjerning av elementer, hvor det sist lagte elementet er det første som fjernes.

Bruk av strukturer i C gjør det mulig å lage fleksible og kraftige datastrukturer som arrayer, lenkede lister, hashtabeller, trær og stabler. Hver struktur er optimalisert for spesifikke oppgaver, noe som gjør programmene mer organiserte og effektive.

1. Hva er hovedfordelen med en lenket liste sammenlignet med en array?

2. I et binært tre kalles en node som har egne barn:

question mark

Hva er hovedfordelen med en lenket liste sammenlignet med en array?

Select the correct answer

question mark

I et binært tre kalles en node som har egne barn:

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 4

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

Can you explain the differences between these data structures?

How do I choose which data structure to use for my program?

Can you provide more examples of how to use these structures in C?

bookKompleks Datastruktur

Sveip for å vise menyen

Datastrukturer gjør det mulig for programmerere å lagre, organisere og håndtere data på en effektiv måte. Enkle arrayer eller sekvensiell lagring er ofte ikke tilstrekkelig for komplekse oppgaver, og derfor benyttes strukturer som lister, trær og hashtabeller.

I C gir strukturer (struct) en fleksibel måte å implementere mange av disse datastrukturene på.

Lenket liste

En lenket liste er nyttig når antall elementer kan endres dynamisk. Hver node inneholder data og en peker til neste node.

Eksempel på nodestruktur:

struct Node {
    int data;           // data in node
    struct Node* next;  // pointer to next node
};

Hver node inneholder et data-felt og en next-peker. Dette gjør det mulig å legge til eller fjerne elementer hvor som helst i listen uten å måtte omorganisere hele strukturen, i motsetning til med arrayer.

Hash-tabell

Hash-tabeller gir mulighet for raskt oppslag av data ved hjelp av en nøkkel. En hash-funksjon konverterer nøkkelen til en indeks i et array, hvor verdien lagres.

Eksempel på implementering av hashtabell:

struct Node {
    char* key;          // key
    int value;          // value
    struct Node* next;  // pointer to next node
};

struct HashTable {
    struct Node** table; // array of node pointers
    int size;            // table size
};

unsigned int hashFunction(char* key, int size) {
    unsigned int hash = 0;
    while (*key) {
        hash += *key++;
    }
    return hash % size;
}

Hvert element i hashtabellen er en lenket liste-node som inneholder en nøkkel og en verdi. Hashfunksjonen konverterer nøkkelen til en tabellindeks, noe som gir raske oppslag selv med store datasett.

Trær

Trær er nyttige for hierarkiske data, raskt søk, innsetting og sletting.

Et binært tre er et tre der hver node har maksimalt to barn: venstre og høyre.

Et eksempel på implementering av et binært tre:

struct node
{
	int data;
	struct node* left; 
	struct node* right; 
};

En node kan være forelder til sine barn samtidig som den er barn av sin forelder. Binære trær gir effektiv dataorganisering og raskt søk på grunn av deres logiske "venstre-høyre"-struktur.

Stack

Brukes til å modellere nettverk og relasjoner.

En stack er en datastruktur der elementer legges til (push) og fjernes (pop) i henhold til LIFO-prinsippet - (Last In, First Out).

Eksempel på stack ved bruk av array:

// Stack structure
typedef struct {
    int data[MAX_SIZE]; 
    int top;
} Stack;

MAX_SIZE - the maximum number of elements a stack can contain.

// Push an element onto the stack
void push(Stack *stack, int value) {
    stack->data[++stack->top] = value;  // Increment top and add the element
    printf("Element %d pushed onto the stack\n", value);
}

// Pop an element from the stack
int pop(Stack *stack) {
    int value = stack->data[stack->top--];  // Retrieve the element and decrement top
    printf("Element %d popped from the stack\n", value);
    return value;
}

Elementet legges til øverst i stabelen (top). Stabler gir rask innsetting og fjerning av elementer, hvor det sist lagte elementet er det første som fjernes.

Bruk av strukturer i C gjør det mulig å lage fleksible og kraftige datastrukturer som arrayer, lenkede lister, hashtabeller, trær og stabler. Hver struktur er optimalisert for spesifikke oppgaver, noe som gjør programmene mer organiserte og effektive.

1. Hva er hovedfordelen med en lenket liste sammenlignet med en array?

2. I et binært tre kalles en node som har egne barn:

question mark

Hva er hovedfordelen med en lenket liste sammenlignet med en array?

Select the correct answer

question mark

I et binært tre kalles en node som har egne barn:

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 4
some-alt