[C] Unie

lukipower
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 14 maja 2014, o 20:26
Płeć: Mężczyzna
Lokalizacja: Świdwin
Podziękował: 1 raz

[C] Unie

Post autor: lukipower »

Witam, mógłby mi ktoś przekształcić program reprezentujący stos liczb o typie zmiennych int, na stos, który za pomocą unii dodaje 4 elementy (zamiast moich pięciu typu int), posiadające typy danych różniące się od siebie: int, char, float i double? Chciałbym na przykładzie przeanalizować jak to ma wyglądać i działać

Kod: Zaznacz cały

#include<stdio.h>
#include<stdlib.h>
 
struct stos
{
 int klucz;
 struct stos *nast;
};
 
 typedef struct stos element;
 typedef element *lista;
 
//funkcja dodajaca na stos
 
void push(lista *e,int k)
{
 lista new;
 
 new=(lista)malloc(sizeof(element));
 new->klucz=k;
 new->nast=*e;
 *e=new;
}

//funkcja pokazujaca stan stosu
 
void peek(lista e)
{
while (e!=NULL){
    printf("%d
",e->klucz);
    e=e->nast;
   }    
}
 
//funkcja usuwajaca ze stosu
 
int pop( lista *e) {
 lista p;
 int k;
   if (*e!=0){
   p=*e;
   k=(*e)->klucz;
   *e=(*e)->nast;
   free(p);
   p=0;
   return k;
}
   return -1;
}
 
 
//glowny program
 
int main()
{
  lista li;
  li=NULL;
 
  printf("Dodawanie na stos liczb 1 2 3 4 5:
");
  push(&li,1);
  push(&li,2);
  push(&li,3);
  push(&li,4);
  push(&li,5);
  peek(li);
  printf("Usuwanie ze stosu:
");
  pop(&li);
  peek(li);
 
    return 0;
  }
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

[C] Unie

Post autor: miki999 »

Bez wgłębiania się w program.
Wszystko zależy czego oczekujesz. Jeżeli kilka bajtów zajętości nie robi Ci znaczenia, to możesz zamiast int klucz (zakładam, że to po prostu wartość zmiennej odkładanej na stos) w stosie dać unię składającą się ze wszystkich typów danych, które Cię interesują. Sumować możesz po jakim typie chcesz (oczywiście wyniki i liczba sumowań mogą się różnić w zależności od typu). Zwróć uwagę, że wtedy będziesz sumował "dopełniania" zmiennych (czyli zapewne 0xFF, zera lub śmieci), które nie zajmują tyle ile ma największy zadeklarowany w unii typ.
ODPOWIEDZ