Стеки — это тип структуры данных, который следует принципу работы LIFO (Last In First Out), где новый элемент добавляется на одном конце (сверху), а часть удаляется только с этого конца.
Здесь мы обсудим некоторые процессы очистки стека, поскольку по умолчанию нет функции clear() для удаления элементов из стека.
Очистите стек, используя цикл
Основная идея состоит в том, чтобы перебирать стек и извлекать все элементы, пока стек не станет пустым.
- Проверьте, пуст стек или нет.
- Вытащите элемент.
- Повторяйте два вышеуказанных шага, пока стек не станет пустым.
Ниже приведена реализация вышеуказанного подхода:
С++
#include <bits/stdc++.h>
using
namespace
std;
// Function to clear stack
void
clearStack(stack<
int
>& s)
{
while
(s.size() != 0) {
s.pop();
}
return
;
}
// Driver Code
int
main()
{
// Initilizing a satck
stack<
int
> s;
s.push(10);
s.push(20);
s.push(30);
s.push(40);
s.push(50);
// Calling clearStack function to clear the stack
clearStack(s);
cout << s.size() << endl;
return
0;
}
Java
// Java code for above approach
import
java.io.*;
import
java.util.*;
class
GFG {
// Function to clear stack
static
void
clearStack(Stack<Integer> s)
{
while
(s.size() !=
0
) {
s.pop();
}
return
;
}
public
static
void
main(String[] args)
{
// Initializing a stack
Stack<Integer> s =
new
Stack<>();
s.push(
10
);
s.push(
20
);
s.push(
30
);
s.push(
40
);
s.push(
50
);
// Calling clearStack function to clear the stack
clearStack(s);
System.out.println(s.size());
}
}
// This code is contributed by lokesh.
Python3
# Python code for above approach
# Function to clear stack
def
clearStack(s):
while
(
len
(s)!
=
0
):
s.pop()
return
# Driver Code
# Initilizing a satck
s
=
[]
s.append(
10
)
s.append(
20
)
s.append(
30
)
s.append(
40
)
s.append(
50
)
# Calling clearStack function to clear the stack
clearStack(s)
(
len
(s))
# This code is contributed by Pushpesh Raj.
Выход
0
Временная сложность: O(N), где N — размер стека.
Вспомогательное пространство: O(1).
Очистите стек, назначив новый пустой стек
Мы можем назначить новый пустой стек той же объявленной переменной. Он использует назначение перемещения, а не удаление элементов один за другим. Но проблема в том, что старый стек на самом деле не удаляется и все еще находится в памяти. Так что это тратит немного памяти.
Ниже представлена реализация идеи.
С++
#include <bits/stdc++.h>
using
namespace
std;
// Driver code
int
main()
{
// Initilizing a satck
stack<
int
> s;
s.push(10);
s.push(20);
s.push(30);
s.push(40);
s.push(50);
// By assigning new empty stack
s = stack<
int
>();
// Printing the size of stack
cout << s.size() << endl;
return
0;
}
Python3
# Python code for above approach
# Driver Code
# Initilizing a satck
s
=
[]
s.append(
10
)
s.append(
20
)
s.append(
30
)
s.append(
40
)
s.append(
50
)
# By assigning new empty stack
s
=
[]
# Printing the size of stack
(
len
(s))
# This code is contributed by Pushpesh Raj.
Выход
0