Stos na tablicy jednowymiarowej.

0

Hejka, zadanie brzmi :

Proszę zaimplementować obsługę kolejki (LIFO) - stosu w oparciu o tablicę jednowymiarową o zadanym przed dyrektywę #define rozmiarze.
Należy zdefiniować funkcje

( 1 ) czytanie stosou "od dna" void show (int *);

Mój kod :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10

void show (int *tab)
{
    int i;
    for( *(tab+N) ; tab > 0 ; tab-- )
    {
        printf("%d\n",*(tab+N));
    }
}

int main()
{
    int tab[N]={1,2,3,4,5,6,7,8,9,10};
    show(*tab);

    return 0;
}

Proszę o wskazówki.

2

Zacznij od podstaw i naucz się jak działa pętla for, bo to co napisałeś jest bezsensu na podstawowym poziomie.

Nie rozumiem jak ktoś zarejestrowany od roku z 30 postami, nie ogarnia jeszcze pętli for?

0

widzę faktycznie , a takie najprostsze wyświetlanie tablicy jednowymiarowej na wskaźniku będzie tak wyglądać?

void show (int *tab)
{

    for( tab ; tab < tab+N ; tab++ )
    {
        printf("%d\n",*(tab));
    }
}

z wywołaniem

show(tab);

EDIT

ok faktycznie głupoty popisałem już mam wersję, która działa, mam nadzieję że jest OKI, wrzucam

#define N 10

void show (int *tab)
{
    int *p;
    for( p=tab+N ; p > tab ; p-- )
    {
        printf("%d\n",*(p-1));
    }
}

int main()
{
    int TAB[N]={1,2,3,4,5,6,7,8,9,10};
    show(TAB);
    return 0;
}

2
void show (int *tab)
{
    int i
    tab = tab + N - 1;
    for(i = 0; i < N; ++i)
    {
        printf("%d\n",*p--);
    }
}

albo coś co dla większości ludzi będzie bardziej czytelne:

void show (int *tab)
{
    int i
    for(i = N - 1; i >= 0; --i)
    {
        printf("%d\n", p[i]);
    }
}
0

A postanowiłem się pobawić na szybko:

#include<stdio.h>
#include<limits.h>

typedef struct int_stack
{
    size_t position;
    size_t length;
    int* container;
} int_stack;

void initialize(int_stack* stack, int container[], size_t container_size)
{
    stack->length = container_size;
    stack->position = 0;
    stack->container = container;
}


void push(int_stack* stack, int value)
{
    if(stack->position < stack->length)
    {
        stack->container[stack->position++] = value;
    }
}

int pop(int_stack* stack)
{
    int value = INT_MIN;
    if(stack->position > 0)
    {
        value = stack->container[--stack->position];
    }
    return value;
}

int main()
{
    int_stack stack;
    int array[5];

    initialize(&stack, array, sizeof(array)/sizeof(array[0]));
    push(&stack, 10);
    push(&stack, 2);
    push(&stack, 6);
    printf("%d\n", pop(&stack));
    printf("%d\n", pop(&stack));
    push(&stack, 3);
    push(&stack,-2);
    printf("%d\n", pop(&stack));
    printf("%d\n", pop(&stack));
    printf("%d\n", pop(&stack));
    printf("%d\n", pop(&stack));
    printf("%d\n", pop(&stack));

    return 0;
}

Coś tam działa: https://ideone.com/l6k2LS

1 użytkowników online, w tym zalogowanych: 0, gości: 1