// programa de stack/pilha de // carros encadeados em struct (Routo Terada 1999) // Funcionando com InsereTopo e return de (CARRO *) 27out99 #include // a seguir typedef global typedef struct car{ // typedef aqui com nome car char *NomeDono; char *Modelo; int Ano; int Km; // quilometragem atual char *Fabricante; // nome do fabricante char *Cor; int NumPortas; // numero de portas int GasOuAlc; // 1==gasolina, 2==alcool int Preco; // preco atual de mercado, em reais char *Chapa; struct car *pseguinte; // aponta para carro seguinte } CARRO; // aqui vai nome do tipo que e' CARRO CARRO * InsereTopo(CARRO *ptopo){ // cria novo carro e insere no topo da pilha apontada por pinicio CARRO *pcar; printf(" Dentro de Insere, Modelo do carro no topo: %s \n", ptopo->Modelo); printf(" Idem, Preco do carro: %d \n", ptopo->Preco); pcar=(CARRO *)malloc(sizeof(CARRO)); // retorna NULL ou ender. de novo carro if(pcar==NULL) { return NULL;} // ocorreu overflow else{ pcar->pseguinte = ptopo; ptopo=pcar; // novo topo } return ptopo; } // fim InsereTopo void main(){ int retorna; CARRO *ptopo; // apontador para carro ptopo=NULL; // pilha vazia no inicio printf("\nINICIO DE EXEC.\n"); // a seguir carros encadeados ptopo=InsereTopo(ptopo); ptopo->Modelo="Astra 1"; printf("Modelo do carro no topo: %s \n", ptopo->Modelo); ptopo->Preco=88; printf("Preco do carro no topo: %d \n", ptopo->Preco); ptopo=InsereTopo(ptopo); ptopo->Modelo="Astra 2"; printf("Modelo do carro no topo: %s \n", ptopo->Modelo); ptopo->Preco=99; printf("Preco do carro no topo: %d \n", ptopo->Preco); if(ptopo->pseguinte!=NULL) printf(" e Modelo do carro abaixo do topo e' Astra 1?: %s \n", (ptopo->pseguinte)->Modelo); ptopo=InsereTopo(ptopo); ptopo->Modelo="Astra 3"; ptopo->Preco=101; printf("Modelo do carro no topo: %s \n", ptopo->Modelo); printf("Preco do carro no topo: %d \n", ptopo->Preco); if(ptopo->pseguinte!=NULL) printf(" e Modelo do carro abaixo do topo e' Astra 2?: %s, preco: %d \n", (ptopo->pseguinte)->Modelo,(ptopo->pseguinte)->Preco); }