chore(C): add stacks arrays and linked list (#655)

Co-authored-by: Arsenic <54987647+Arsenic-ATG@users.noreply.github.com>
pull/663/head
Anish 2022-01-05 18:51:41 +05:30 committed by GitHub
parent e8bb90680d
commit 6c646cb6ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 417 additions and 0 deletions

View File

@ -69,3 +69,8 @@
- [Jump Search](searching/Jump-search.c) - [Jump Search](searching/Jump-search.c)
- [Ternary Search](searching/Ternary-search.c) - [Ternary Search](searching/Ternary-search.c)
- [Interpolation Search](searching/Interpolation-search.c) - [Interpolation Search](searching/Interpolation-search.c)
## Stacks
- [Stack using arrays](stacks/stack-using-arrays.c)
- [Stack using Linked List](stacks/stack-using-linked-list.c)

View File

@ -0,0 +1,191 @@
// Implementation of stack using array
/*
Implement the following stack operations :
1. Push
2. Pop
3. Peek
4. Display
*/
#include <stdio.h>
#include <stdlib.h>
#define N 50
int stack[N];
int top = -1;
// Push Element at the top of stack
void push()
{
int x;
printf("Enter The Element to push: ");
scanf("%d", &x);
if (top == N - 1)
{
printf("Stack overflow\n");
}
else
{
top++;
stack[top] = x;
printf("%d pushed to Stack\n", x);
}
}
// Pop the top-element from the stack
void pop()
{
if (top == -1)
{
printf("Stack underflow\n");
}
else
{
int item = stack[top];
top--;
printf("Popped: %d\n", item);
}
}
// Prints the top-most element
void peek()
{
if (top == -1)
{
printf("Stack is empty\n");
}
else
{
printf("Top Element: %d\n", stack[top]);
}
}
// Prints the stack
void display()
{
printf("Displaying Stack....\n");
for (int i = top; i >= 0; i--)
{
printf("%d ", stack[i]);
}
printf("\n");
}
int main()
{
int ch;
while (1)
{
printf("\n*** Stack Menu ***");
printf("\n\n1.Insert\n2.Delete\n3.Display\n4.Peek\n5.Exit");
printf("\n\nEnter your choice(1-4):");
scanf("%d", &ch);
switch (ch)
{
case 1:
push();
break;
case 2:
pop();
break;
case 3:
display();
break;
case 4:
peek();
break;
case 5:
exit(0);
default:
printf("\nWrong Choice!!");
}
}
return 0;
}
/*
Output:
*** Stack Menu ***
1.Insert
2.Delete
3.Display
4.Peek
5.Exit
Enter your choice(1-4):1
Enter The Element to push: 4
4 pushed to Stack
*** Stack Menu ***
1.Insert
2.Delete
3.Display
4.Peek
5.Exit
Enter your choice(1-4):1
Enter The Element to push: 3
3 pushed to Stack
*** Stack Menu ***
1.Insert
2.Delete
3.Display
4.Peek
5.Exit
Enter your choice(1-4):1
Enter The Element to push: 2
2 pushed to Stack
*** Stack Menu ***
1.Insert
2.Delete
3.Display
4.Peek
5.Exit
Enter your choice(1-4):2
Popped: 2
*** Stack Menu ***
1.Insert
2.Delete
3.Display
4.Peek
5.Exit
Enter your choice(1-4):4
Top Element: 3
*** Stack Menu ***
1.Insert
2.Delete
3.Display
4.Peek
5.Exit
Enter your choice(1-4):3
Displaying Stack....
3 4
*** Stack Menu ***
1.Insert
2.Delete
3.Display
4.Peek
5.Exit
Enter your choice(1-4):5
*/

View File

@ -0,0 +1,221 @@
// Implementation of stack using Linked List
/*
Implement the following stack operations :
1. Push
2. Pop
3. Peek
4. Display
*/
#include <stdio.h>
#include <stdlib.h>
struct Stack
{
int data;
struct Stack *next;
};
struct Stack *top = NULL;
// Push Element at the top of stack
void push()
{
int x;
printf("Enter Element to be pushed\n");
scanf("%d", &x);
struct Stack *newNode = (struct Stack *)malloc(sizeof(struct Stack));
newNode->data = x;
newNode->next = top;
top = newNode;
}
// Pop the top-element from the stack
void pop()
{
struct Stack *temp = (struct Stack *)malloc(sizeof(struct Stack));
temp = top;
if (top == NULL)
{
printf("Stack is empty\n");
}
else
{
printf("Popped Element is %d\n", top->data);
top = top->next;
free(temp);
}
}
// Prints the top-most element
void peek()
{
if (top == NULL)
{
printf("Stack is empty\n");
}
else
{
printf("Top element is %d\n", top->data);
}
}
// Prints The Stack
void display()
{
struct Stack *temp = top;
if (top == NULL)
{
printf("Stack is empty\n");
}
else
{
while (temp != NULL)
{
printf("%d ", temp->data);
temp = temp->next;
}
}
printf("\n");
}
// Delete Entire Stack
void deleteStack()
{
struct Stack *temp = top;
if (top == NULL)
{
printf("Stack is empty\n");
}
else
{
while (temp != NULL)
{
top = top->next;
free(temp);
temp = top;
}
}
}
int main()
{
int opt;
while (1)
{
printf("which operation do you want to perform?\n");
printf("1.Push\n");
printf("2.Pop\n");
printf("3.Peek\n");
printf("4.Display\n");
printf("5.Delete Entire Stack\n");
printf("6.Exit\n");
scanf("%d", &opt);
switch (opt)
{
case 1:
push();
break;
case 2:
pop();
break;
case 3:
peek();
break;
case 4:
display();
break;
case 5:
deleteStack();
break;
case 6:
exit(0);
break;
default:
printf("Unknown operation\n");
}
}
return 0;
}
/*
Output:
which operation do you want to perform?
1.Push
2.Pop
3.Peek
4.Display
5.Delete Entire Stack
6.Exit
1
Enter Element to be pushed
10
which operation do you want to perform?
1.Push
2.Pop
3.Peek
4.Display
5.Delete Entire Stack
6.Exit
1
Enter Element to be pushed
5
which operation do you want to perform?
1.Push
2.Pop
3.Peek
4.Display
5.Delete Entire Stack
6.Exit
1
Enter Element to be pushed
3
which operation do you want to perform?
1.Push
2.Pop
3.Peek
4.Display
5.Delete Entire Stack
6.Exit
4
3 5 10
which operation do you want to perform?
1.Push
2.Pop
3.Peek
4.Display
5.Delete Entire Stack
6.Exit
2
Popped Element is 3
which operation do you want to perform?
1.Push
2.Pop
3.Peek
4.Display
5.Delete Entire Stack
6.Exit
5
which operation do you want to perform?
1.Push
2.Pop
3.Peek
4.Display
5.Delete Entire Stack
6.Exit
4
Stack is empty
which operation do you want to perform?
1.Push
2.Pop
3.Peek
4.Display
5.Delete Entire Stack
6.Exit
6
*/