-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathw.c
101 lines (92 loc) · 2.43 KB
/
w.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <stdio.h>
#include <stdlib.h>
//#include"bib_Tipos.h"
typedef struct tip{
int* a;
}tip;
//Definição dos nós da pilha
typedef struct dado {
tip* a;
//lista_simb* tbl;
struct dado* ant; //Apontador pro elemento empilhado abaixo do atual
} dado;
//Definição da pilha
typedef struct pilha{
dado* topo; //Apontador pro topo da pilha
} pilha;
//Função de inserção
void insert(tip* t,pilha* p1){
printf("entrou");
dado* d1=(dado*) malloc(sizeof(dado)); //Alocando endereço do novo nó
(*d1).a=t;
(*d1).ant=(*p1).topo; //Atribuindo ao novo nó o apontador para o atual topo da pilha
(*p1).topo=d1; //Apontando a pilha pro novo nó
printf("saiu");
//(*p1).topo = d1;
// return;
}
void imprime(pilha* p1){
dado* aux=(*p1).topo;
do{
//iprimirlista((*aux).tbl);//{printf("%d ",(*aux).a);
printf("%d ",(*(*(*aux).a).a));
aux=(*aux).ant;
}while (aux!=NULL);
printf("\n");
}
//Função para desempilhar
void pop(pilha* p1){
if (!vazia(p1)){
//Comandos de correção da referência,quando a pilha não está vazia
dado* d;
d=(*p1).topo;
(*p1).topo=(*(*p1).topo).ant; //Desempilhando o elemento do topo
free(d);
}else
printf("Pilha vazia!!\n");
return;
}
//Função que checa se a pilha está vazia
int vazia (pilha* p){
return ((*p).topo==NULL);
}
void main(){
// printf("M");
tip* valor;
char opc;
pilha* p = malloc(sizeof(pilha)); //Alocação da pilha
(*p).topo=NULL;
// do { //Laço para leitura das opções
// int nlidos = scanf("%c %d", &opc, &valor);
// switch(opc){
// case ('i'):
int* h ;//= (int*) malloc(sizeof(int)); //Alocando endereço do novo nó
valor=(tip*) malloc(sizeof(tip)); //Alocando endereço do novo nó
(*h)=2;
(*valor).a=h;
insert(valor,p);
h = (int*) malloc(sizeof(int)); //Alocando endereço do novo nó
valor=(tip*) malloc(sizeof(tip)); //Alocando endereço do novo nó
(*h)=5;
(*valor).a=h;
insert(valor,p);
int* j=NULL;
printf("\n%s \n",j);
/* printf("Z");
valor=(tip*) malloc(sizeof(tip)); //Alocando endereço do novo nó
(*(*valor).a)=3;
insert(valor,p);
valor=(tip*) malloc(sizeof(tip)); //Alocando endereço do novo nó
(*(*valor).a)=7;
insert(valor,p);
*/
// break;
// case ('r'):
// pop(p);
// }
// } while (opc!='e'); //determinação da flag pra sair do modo de leitor de entradas
if (!vazia(p))
imprime(p);
else
printf("Vazia\n");
}