Stos na wskażnikach się zawiesza

0

Mam na lekcje zrobić stos na wskażnikach. Na razie zrobiłem funkcje kładącą na stos. (C na windows viście) taki kod el = malloc (8);
*el = adres;
*(el + 4) = znak;
adres = el;
el = NULL;

}

main ()
{
push (0);
push (0);
system ("PAUSE");

}

, ale on się zawiesza. Możecie mi pomóc.
0

Ale co to właściwie jest to co nam pokazałeś? Bo to jest jakiś bełkot a nie żaden stos. Gdzie masz jakąś strukturę chociaż? A takie coś

*(el + 4)

to terroryzm ;]

0

Do *el wkładam adres poprzedniej "komórki" (to jedyny kierunek odwoływania się do innych elementów i to do tyłu), a do *(el + 4) wkładam wartość przechowywaną.

A zatem przy czytaniumogę się tylko cofać, zaś piszę do przodu. (To chyba definicja stosu).

0

Sorry żle wkleiłem kod, teraz jest właściwy:

#include <stdio.h>

int adres = 0;
int *el;

void push (int znak)
{
 el = malloc (8);
 *el = adres;
 *(el + 4) = znak;
 adres = el;
 el = NULL;

}

main ()
{
 push (0);
 push (0);
 system ("PAUSE");

}
0

Robisz sobie jaja?

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

struct Node
{
  struct Node* next;
  int val;
};
typedef struct Node Node;

struct Stos
{
  Node* top;
};
typedef struct Stos Stos;

void push(int wartosc, Stos* stos);
int pop(Stos* stos);
int empty(Stos* stos);

int main()
{
  int i;
  Stos* stos = (Stos*) malloc(sizeof(Stos));
  stos->top = NULL;
  for (i=0;i<5;i++)
    push(i,stos);
  for (i=0;i<6;i++)
    printf("%d ",pop(stos));
  free(stos);
  return 0;
}

void push(int wartosc,Stos* stos)
{
  Node* el = (Node*) malloc(sizeof(Node));
  el->val=wartosc;
  el->next=stos->top;
  stos->top=el;
}

int pop(Stos* stos)
{
  if(!empty(stos))
  {
    int retval = stos->top->val;
    Node* deleter = stos->top;
    stos->top = stos->top->next;
    free(deleter);
    return retval;
  }
  else
  {
    printf("\nBlad! Pusty stos!");
    exit(1);
  }
}

int empty(Stos* stos)
{
 return !(stos->top->next);
}

0

A po zejściu z dyskusji o definicje czy ktoś wie jak zrobić, aby mój kod się nie zawieszał?

0

Napisać go od nowa, poprawnie? Przecież to co napisałeś to jest jakis bełkot.

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

int adres = 0;
int* el;

void push (int znak)
{
 el = (int*) malloc(8);
 *el = adres;
 *(el + 4) = znak;
 adres = (int) el;
 el = NULL;
}

int main()
{
 push(0);
 push(0);
 getchar();
 return 0;
}

Teraz powinno sie skompilować przynajmniej i nie wysypać przy uruchomieniu. Ale ty poważnie chcesz taki kod komuś pokazać? :D Ja na miejscu nauczyciela posikałbym sie ze śmiechu, a potem cię oblał...
Mam dobry humor i wstawiłem ci powyżej kompletny, działający kod. Nie rób z siebie idioty i z niego skorzystaj...

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