chore(C): add stacks arrays and linked list (#655)
Co-authored-by: Arsenic <54987647+Arsenic-ATG@users.noreply.github.com>pull/663/head
parent
e8bb90680d
commit
6c646cb6ab
|
@ -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)
|
|
@ -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
|
||||||
|
*/
|
|
@ -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
|
||||||
|
*/
|
Loading…
Reference in New Issue