Anonymní profil LukasMegPrask – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil LukasMegPrask – Programujte.comAnonymní profil LukasMegPrask – Programujte.com

 

Příspěvky odeslané z IP adresy 109.80.103.–

LukasMegPrask
C / C++ › Vypis retezce pozpatku pomoc…
4. 3. 2013   #172306

Ahoj potřeboval, bych pomoct s úkolem, kde mám vytvořit zásobník a naprogramovat funkce pro praci s ním. Nevím si ale rady s funkcí reverse. Mohl by mi někdo poradit?

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

struct stack_struct
{
    char value;
    struct stack_struct* next;
};
typedef struct stack_struct* Stack;

Stack empty_stack()
// funkce vraci prazdny zasobnik
{
    return NULL;
}

int isempty_stack(Stack s)
// testuje, zda je zasobnik s prazdny (vraci 0 nebo 1)
{
    return (s == NULL);
}

Stack push(const char value, Stack s)
// alokuje novy vrchol zasobniku a vlozi do nej znak value
{
    // 1. naalokuji nove misto v pameti
    Stack tmp = (Stack) malloc(sizeof(Stack));
    // 2. ulozim do nej hodnotu value a ukazatel na stavajici zasobnik
    tmp->value = value;
    tmp->next = s;
    // 3. vratim novy ukazatel tmp
    return tmp;
}

Stack pop(Stack s)
// pokud zasobnik NENI prazdny, odebere vrchol ze zasobniku a uvolni pamet
{
    if(isempty_stack(s))
    // pokud je zasobnik prazdny, vratim prazdny zasobnik
    {
        return NULL;
    }
    else
    // jinak vytvorim pomocny ukazatel tmp a nasmeruji jej na druhy prvek
    // za vrcholem zasobniku
    {
        Stack tmp = s->next;
        // uvolnim misto v pameti, kde je stary vrchol zasobniku
        free(s);
        // vratim ukazatel tmp na takto upraveny zasobnik
        return tmp;
    }
}

char top(Stack s)
// vraci hodnotu na vrcholu zasobniku
// pokud je zasobnik prazdny, vrati znak s ASCII kodem 0
{
    if(isempty_stack(s)) return 0;
    else return s->value;
}

void print_stack(Stack s)
// vypise vsechny hodnoty v zasobniku na standardni vystup
// pokud je zasobnik prazdny, vypise zpravu "Zasobnik je prazdny"
{
    if(isempty_stack(s))
    {
        printf("Zasobnik je prazdny.");
    }
    else
    // pokud zasobnik neni prazdny, vytvorim si pomocny ukazatel na vrchol
    {
        Stack tmp = s;
        while(!isempty_stack(tmp))
        // postupne tisknu hodnoty a prochazim zasobnik
        {
            printf("%c", top(tmp));
            tmp = tmp->next;
        }
    }
    printf("\n");
}

void reverse(const char* str)
// funkce, ktera vytiskne na standardni vystup retezec pozpatku
// (s vyuzitim zasobniku)
// predpokladejte, ze retezec je ukoncen ukoncovacim znakem (ASCII kod 0)
{
   
}

int main()
// hlavni funkce slouzi pro otestovani funkcnosti Vasi implementace
{
    printf("\nTEST ZASOBNIKU\n\n");
    printf("1. Vytvarim zasobnik\n");
    Stack s = empty_stack();
    printf("   Obsah zasobniku: ");
    print_stack(s);
    printf("2. Vkladam znak a\n");
    s = push('a', s);
    printf("3. Vkladam znak b\n");
    s = push('b', s);
    printf("4. Vkladam znak c\n");
    s = push('c', s);
    printf("   Vrchol zasobniku: %c\n", top(s));
    printf("   Obsah zasobniku: ");
    print_stack(s);
    printf("5. Odebiram vrchol zasobniku\n");
    s = pop(s);
    printf("   Obsah zasobniku: ");
    print_stack(s);
    printf("6. Odebiram vrchol zasobniku\n");
    s = pop(s);
    printf("   Obsah zasobniku: ");
    print_stack(s);
    printf("7. Odebiram vrchol zasobniku\n");
    s = pop(s);
    printf("   Obsah zasobniku: ");
    print_stack(s);
    printf("8. Odebiram vrchol zasobniku\n");
    s = pop(s);
    printf("   Obsah zasobniku: ");
    print_stack(s);
    printf("\nTEST PREVRACENI RETEZCE:\n\n");
    printf("Ahoj jak se mas? => ");
    reverse("Ahoj jak se mas?");
    return 0;
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý