Datenstrukturen in C/C++

Stack-Datenstruktur

Ein Stack arbeitet nur am oberen Ende: push fügt ein, pop entfernt und peek liest.

Was ist Stack-Datenstruktur?

Ein Stack arbeitet nur am oberen Ende: push fügt ein, pop entfernt und peek liest.

Implementiere Last-in-first-out-Operationen.

Wichtige Punkte

  • Definiere Invarianten vor den Operationen.
  • Behandle leere, volle und fehlgeschlagene Allokationen.
  • Bewerte Laufzeit und Speicherbesitz gemeinsam.

Codebeispiele in C und C++

C
Code ausführen →
main.c
#include <stdio.h>

typedef struct {
    int data[8];
    int size;
} Stack;

int push(Stack *stack, int value) {
    if (stack->size == 8) return 0;
    stack->data[stack->size++] = value;
    return 1;
}

int pop(Stack *stack, int *value) {
    if (stack->size == 0) return 0;
    *value = stack->data[--stack->size];
    return 1;
}

int main(void) {
    Stack stack = {{0}, 0};
    int value;
    push(&stack, 10);
    push(&stack, 20);
    pop(&stack, &value);
    printf("%d\n", value);
}
Erwartete Ausgabe
20
C++
Code ausführen →
main.cpp
#include <iostream>
#include <stack>

int main() {
    std::stack<int> values;
    values.push(10);
    values.push(20);
    std::cout << values.top() << '\n';
    values.pop();
}
Erwartete Ausgabe
20

Vergleich zwischen C und C++

Die feste C-Variante prüft Über- und Unterlauf; std::stack verwaltet Kapazität durch seinen zugrunde liegenden Container.

C

Strukturen und Operationen sind getrennt; Allokation ist explizit.

C++

Klassen und Container schützen Invarianten und verwalten Ressourcen.

Übungsaufgaben

Führe beide Versionen aus und untersuche die unterschiedlichen Garantien.

  • Teste leere und volle Zustände.
  • Implementiere Cleanup und prüfe auf Leaks.
  • Vergleiche mit einem Standardcontainer.