Zadanie stos- tablica cykliczna?

0

Witam!
Ucząc się języka C robię sb zadania różne no i kolejne jakie mam zrobić jest dla mnie trochę problematyczne bo po prostu nie rozumiem o co mnie proszą w treści tego zadania...
oto one:

Napisać program, który w tablicy int kolejka[10] realizuje kolejkę jako tablicę cykliczną (tj. jako tablicę z adresowaniem elementów modulo 10) ze zdefiniowanymi funkcjami wstaw() i usun(). Ogólna postać programu jak w poprzednim zadaniu. Zastosować notację wskaźnikową w celu dostępu do elementów tablicy.

No i właśnie nwm co wgl mam zrobić i jak by miało to wyglądać. Poniżej wklejam kod tego "poprzedniego zadania". Domyślam się że całość co będę musiał zrobić to jakieś małe dodatki i tyle.

#include <stdio.h>
#include <stdlib.h>
typedef struct element{
    int value;
    struct element *next;
}element;

/*funkcja umieszczająca elem na szczycie stosu*/
void push(element **stos, int elem){
    element* biezacy; /*tymczasowa komorka*/
    if((biezacy=(element*)malloc(sizeof(element)))==NULL)/*gdyby stos był pusty*/
    return ;
    else{
        biezacy->value=elem;    /*przypisanie do komorki stosu pobranej wartosci*/
        biezacy->next=*stos;       /*przypisanie aktualnej informacji do stosu*/
        *stos=biezacy;
    }
}

/*funkcja zdejmująca elem ze szczytu stosu*/
void pop(element **stos,int elem){
element *tmp;
if(stos!=NULL){
tmp=*stos;
elem=tmp->value;
*stos=tmp->next;
free(tmp);
return ;
}
else {
printf("Blad brak danych\n");
return;}
}

/*funkcja drukująca w strumieniu wyjscia (stdout) cały stos*/
void print(element *stos){
    if(stos==NULL)
    printf("Brak elementow\n");
    else
        do{
            printf("%5d\n",stos->value);
            stos=stos->next;
        }while (stos!=NULL);

}

int main(){
    element *stos=NULL;
    int wybor;
    int elem=0;
    printf("MENU:\n");
    printf("0-zakoncz\n");
    printf("1-dodaj do stosu\n");
    printf("2-usun liczbe\n");
    printf("3-wyswietl\n");
    for(;;)
    {
    printf("~");
    scanf("%d",&wybor);
    switch(wybor){
        case 0:
            exit(0);
            break;
        case 1:
            {
            printf("Podaj liczbe:");
            scanf ("%d",&elem);
            push(&stos,elem);
            }
            break;
        case 2:
            pop(&stos,elem);
            break;
        case 3:
            print(stos);
        break;
        default:
            printf("Blad, brak takiej opcji\n");
            break;
    }
    }
    return 0;
}
0

Tu chyba chodzi o własną implementację tablicy z haszowaniem chodzi o to że element jest nie jest wstawiany tak jak by to wynikało z kolejności wstawiania tylko na postawie reszty z dzielenia przez 10, np element (wstawiany jako pierwszy) o wartości 3 zostanie wstawiony do 3 komórki tablicy tak samo jak 103, wtedy dochodzi do kolizji i trzeba to jakoś rozwiązać, w tym przypadku w każdej komórce tablicy masz mieć listę jedną/dwukierunkową (domyślam się że o to chodzi bo wskaźniki)/

3

Żaden stos, żadne haszowanie. Masz implementować kolejkę, tyle że z cyklicznym buforem.
W zadaniu masz bufor na 10 elementów, ale w uproszeniu wyjaśnię na przykładzie bufora 4-elementowego

[ ] [ ] [ ] [ ]
wstaw 1
[1] [ ] [ ] [ ]
wstaw 9
[1] [9] [ ] [ ]
wstaw -2
[1] [9] [-2] [ ]
usun
[ ] [9] [-2] [ ]
wstaw 3
[ ] [9] [-2] [3]
usun
[ ] [ ] [-2] [3]
wstaw -5
[-5] [ ] [-2] [3]
usun
[-5] [ ] [ ] [3]
wstaw 4
[-5] [4] [ ] [3]
usun
[-5] [4] [ ] [ ]
itd.
0

tzn co mam zmienic w kodzie? mam calkowicie zmienic funkcje pop itd? juz rozummiem ale nwm jak to zrobic nadal

0

Ja bym napisał wszystko od nowa, ten obecny kod niewiele pomaga.

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