Skip to content

Instantly share code, notes, and snippets.

@AmirHosein-Gharaati
Created June 23, 2022 14:06
Show Gist options
  • Save AmirHosein-Gharaati/6b161c50040bbd5029eefcb35cc6db13 to your computer and use it in GitHub Desktop.
Save AmirHosein-Gharaati/6b161c50040bbd5029eefcb35cc6db13 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int value;
struct node *next;
} Node;
Node *make_node(int value, Node *next){
Node *Temp = malloc(sizeof(Node));
Temp->value = value;
Temp->next = next;
return Temp;
}
typedef struct {
Node *first;
size_t size;
} Stack;
Stack *make_stack(Node *N){
Stack *S = malloc(sizeof(Stack));
S->first = N;
S->size = (S->first != NULL) ? 1 : 0;
return S;
}
void stack_push(Stack *S, int value){
Node *Temp = S->first;
if(Temp == NULL){
S->first = make_node(value, NULL);
S->size++;
return;
}
while(Temp->next != NULL)
Temp = Temp->next;
Temp->next = make_node(value, NULL);
S->size++;
}
void stack_pop(Stack *S){
Node *Temp = S->first;
if(Temp == NULL)
return;
if(Temp->next == NULL){
S->first = NULL;
S->size = 0;
free(Temp);
return;
}
Node *P;
while(Temp->next != NULL){
P = Temp;
Temp = Temp->next;
}
S->size--;
P->next = NULL;
free(Temp);
}
Node *stack_top(Stack *S){
Node *Temp = S->first;
if(Temp == NULL)
return NULL;
while(Temp->next != NULL)
Temp = Temp->next;
return Temp;
}
int stack_is_empty(Stack *S){
return !(S->size > 0 && S->first != NULL);
}
int main(){
Stack *S = make_stack(NULL);
for(int i = 1 ; i <= 100; i++)
stack_push(S, i);
printf("%d ", stack_top(S)->value);
printf("\n");
for(int i = 1 ; i <= 105; i++)
stack_pop(S);
printf("Stack is Empty: %d\n", stack_is_empty(S));
stack_push(S, 123);
printf("Stack is Empty: %d\n", stack_is_empty(S));
printf("%d", stack_top(S)->value);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment