// Implementing stack using Array in C language
// -------------------------------------------------------
#include
#include
struct Stack{
int size;
int top;
int *arr;
};
// ---- operations to perform :
// isEmpty-
// isFull-
// push-
// pop-
// peek-
// stackTop-
// stackBottom-
// -------------------------------------
int isEmpty(struct Stack * ptr){
if(ptr->top == -1)
return 1;
else
return 0;
}
// -------------------------------------
int isFull(struct Stack * ptr){
if(ptr->top == ptr->size-1)
//if(ptr->top == ptr->arr[ptr->top])
return 1;
else
return 0;
}
// -------------------------------------
void push(struct Stack *ptr, int data){
if(isFull(ptr)){
printf("Stack Overflow for data %d \n", data);
}
else{
ptr->top+=1;
ptr->arr[ptr->top] = data;
}
}
// -------------------------------------
int pop(struct Stack *ptr){
if(isEmpty(ptr))
printf("Stack Underflow");
else{
int p = ptr->arr[ptr->top];
ptr->top-=1;
return p;
}
}
// -------------------------------------
int peek(struct Stack *ptr, int i){
int arrInd = ptr->top-i+1;
if(arrInd <= -1)
printf("Not valid position.");
else
return ptr->arr[arrInd];
return -1;
}
// -------------------------------------
int stackTop(struct Stack *ptr){
return ptr->arr[ptr->top];
}
// -------------------------------------
int stackBottom(struct Stack *ptr){
return ptr->arr[0];
}
// -------------------------------------
int main(){
struct Stack *s = (struct Stack *)malloc(sizeof(struct Stack));
s->size=10;
s->top=-1;
s->arr=(int *)malloc(s->size*sizeof(int));
printf("Before pushing: Full %d\n",isFull(s));
printf("Before pushing: Empty %d\n",isEmpty(s));
push(s, 1);
push(s, 2);
push(s, 3);
push(s, 4);
push(s, 5);
push(s, 6);
push(s, 7);
push(s, 8);
push(s, 9);
push(s, 10);
push(s, 11);
push(s, 12);
push(s, 13);
printf("After pushing: Full %d\n",isFull(s));
printf("After pushing: Empty %d\n",isEmpty(s));
printf("\n----------------------\n");
printf("Peeking through stack\n");
for(int j=1;jtop+2;j++){
printf("The value at position %d is %d\n", j, peek(s, j));
}
printf("\nPopped %d from stack", pop(s));
printf("\nPopped %d from stack", pop(s));
printf("\nPopped %d from stack", pop(s));
printf("\nPopped %d from stack\n\n", pop(s));
printf("After popping: Full %d\n",isFull(s));
printf("After popping: Empty %d\n",isEmpty(s));
printf("\n----------------------\n");
printf("Peeking through stack\n");
for(int j=1;jtop+2;j++){
printf("The value at position %d is %d\n", j, peek(s, j));
}
printf("\nStack at top now is %d", stackTop(s));
printf("\nStack at bottom now is %d", stackBottom(s));
return 0;
}
// ------------------------------------------------------------------------------------------------------
// Implementing Stack using Linked List in C language
#include
#include
struct Node{
int data;
struct Node *next;
};
// isEmpty
// isFull
// push
// pop
struct Node * top = NULL;
void traverseLinkedList(struct Node *ptr){
while(ptr!=NULL){
printf("Element is %d\n", ptr->data);
ptr=ptr->next;
}
}
int isEmpty(struct Node *top){
if(top == NULL)
return 1;
else
return 0;
}
int isFull(struct Node *top){
struct Node *n = (struct Node*)malloc(sizeof(struct Node));
if (n==NULL)
return 1;
else
return 0;
}
//int pop(struct Node **top){
// if(isEmpty(top))
// printf("Stack Underflow");
// else{
// struct Node *p = *top;
// *top = (*top) -> next;
// int m=p->data;
// return m;
// }
//}
int pop(struct Node *tp){
if(isEmpty(top))
printf("Stack Underflow");
else{
struct Node *p = tp;
top = (tp) -> next;
int m=p->data;
free(p);
return m;
}
}
struct Node *push(struct Node *top, int x){
if (isFull(top))
return 1;
else{
struct Node *pr = (struct Node*)malloc(sizeof(struct Node));
pr->data = x;
pr->next = top;
top = pr;
return top;
}
}
int main(){
//struct Node * top = NULL;
top = push(top, 3);
top = push(top, 6);
top = push(top, 11);
top = push(top, 23);
top = push(top, 47);
traverseLinkedList(top);
// int element=pop(&top);
int element=pop(top);
printf("Popped element is %d \n", element);
traverseLinkedList(top);
return 0;
}