#include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 // Structure to represent two stacks typedef struct { int arr[MAX_SIZE]; int top1; // Top index of the first stack int top2; // Top index of the second stack } TwoStacks; // Function to initialize the two stacks void initialize(TwoStacks *ts) { ts->top1 = -1; ts->top2 = MAX_SIZE; } // Function to push an element to the first stack void push1(TwoStacks *ts, int value) { if (ts->top1 < ts->top2 - 1) { ts->arr[++ts->top1] = value; } else { printf("Stack Overflow in stack1 by element: %d\n", value); } } // Function to push an element to the second stack void push2(TwoStacks *ts, int value) { if (ts->top1 < ts->top2 - 1) { ts->arr[--ts->top2] = value; } else { printf("Stack Overflow in stack2 by element: %d\n", value); } } // Function to pop an element from the first stack int pop1(TwoStacks *ts) { if (ts->top1 >= 0) { return ts->arr[ts->top1--]; } else { printf("Stack UnderFlow in stack1\n"); exit(EXIT_FAILURE); } } // Function to pop an element from the second stack int pop2(TwoStacks *ts) { if (ts->top2 < MAX_SIZE) { return ts->arr[ts->top2++]; } else { printf("Stack UnderFlow in stack2\n"); exit(EXIT_FAILURE); } } // Function to check if both stacks are full int isStackFull(TwoStacks *ts) { return ts->top1 >= ts->top2 - 1; } // Function to check if the first stack is empty int isStack1Empty(TwoStacks *ts) { return ts->top1 == -1; } // Function to check if the second stack is empty int isStack2Empty(TwoStacks *ts) { return ts->top2 == MAX_SIZE; } // Function to display the first stack void displayStack1(TwoStacks *ts) { if (isStack1Empty(ts)) { printf("Stack 1 is empty\n"); } else { printf("Stack 1: "); for (int i = 0; i <= ts->top1; i++) { printf("%d ", ts->arr[i]); } printf("\n"); } } // Function to display the second stack void displayStack2(TwoStacks *ts) { if (isStack2Empty(ts)) { printf("Stack 2 is empty\n"); } else { printf("Stack 2: "); for (int i = MAX_SIZE - 1; i >= ts->top2; i--) { printf("%d ", ts->arr[i]); } printf("\n"); } } int main() { TwoStacks ts; initialize(&ts); int choice, stackNumber, value; while (1) { printf("\n1. Push\n2. Pop\n3. Check if Stacks are Full\n4. Check if Stack is Empty\n5. Display Stack\n6. Exit\n"); printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: printf("Enter stack number (1 or 2): "); scanf("%d", &stackNumber); printf("Enter value to push: "); scanf("%d", &value); if (stackNumber == 1) { push1(&ts, value); } else if (stackNumber == 2) { push2(&ts, value); } else { printf("Invalid stack number\n"); } break; case 2: printf("Enter stack number (1 or 2): "); scanf("%d", &stackNumber); if (stackNumber == 1) { printf("Popped element from stack1: %d\n", pop1(&ts)); } else if (stackNumber == 2) { printf("Popped element from stack2: %d\n", pop2(&ts)); } else { printf("Invalid stack number\n"); } break; case 3: if (isStackFull(&ts)) { printf("Both stacks are full\n"); } else { printf("Stacks are not full\n"); } break; case 4: printf("Enter stack number (1 or 2): "); scanf("%d", &stackNumber); if (stackNumber == 1) { if (isStack1Empty(&ts)) { printf("Stack 1 is empty\n"); } else { printf("Stack 1 is not empty\n"); } } else if (stackNumber == 2) { if (isStack2Empty(&ts)) { printf("Stack 2 is empty\n"); } else { printf("Stack 2 is not empty\n"); } } else { printf("Invalid stack number\n"); } break; case 5: printf("Enter stack number (1 or 2): "); scanf("%d", &stackNumber); if (stackNumber == 1) { displayStack1(&ts); } else if (stackNumber == 2) { displayStack2(&ts); } else { printf("Invalid stack number\n"); } break; case 6: exit(0); default: printf("Invalid choice, please try again\n"); } } return 0; }
Write, Run & Share C Language code online using OneCompiler's C online compiler for free. It's one of the robust, feature-rich online compilers for C language, running the latest C version which is C18. Getting started with the OneCompiler's C editor is really simple and pretty fast. The editor shows sample boilerplate code when you choose language as 'C' and start coding!
OneCompiler's C online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample C program which takes name as input and print your name with hello.
#include <stdio.h>
int main()
{
char name[50];
printf("Enter name:");
scanf("%s", name);
printf("Hello %s \n" , name );
return 0;
}
C language is one of the most popular general-purpose programming language developed by Dennis Ritchie at Bell laboratories for UNIX operating system. The initial release of C Language was in the year 1972. Most of the desktop operating systems are written in C Language.
When ever you want to perform a set of operations based on a condition if-else
is used.
if(conditional-expression) {
// code
} else {
// code
}
You can also use if-else for nested Ifs and if-else-if ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to if-else-if ladder.
switch(conditional-expression) {
case value1:
// code
break; // optional
case value2:
// code
break; // optional
...
default:
// code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
// code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while(condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Array is a collection of similar data which is stored in continuous memory addresses. Array values can be fetched using index. Index starts from 0 to size-1.
data-type array-name[size];
data-type array-name[size][size];
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity.
Two types of functions are present in C
Library functions are the in-built functions which are declared in header files like printf(),scanf(),puts(),gets() etc.,
User defined functions are the ones which are written by the programmer based on the requirement.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
//code
}