ADT (абстрактный тип данных) — это концепция программирования, которая позволяет определять структуру данных и операции, которые можно над ней выполнять, без указания деталей реализации. Такое разделение интерфейса и реализации обеспечивает инкапсуляцию и модульность кода, обеспечивая гибкость и возможность повторного использования кода.
В C++ ADT обычно реализуются с использованием классов или структур. Определение класса служит интерфейсом, определяющим операции, которые можно выполнять со структурой данных, а детали реализации скрыты внутри методов класса.
Вот пример реализации ADT для простой структуры данных стека в C++:
#include <iostream>
#define MAX_SIZE 100
class Stack {
private:
int arr[MAX_SIZE];
int top;
public:
Stack() {
top = -1;
}
bool isEmpty() {
return top == -1;
}
bool isFull() {
return top == MAX_SIZE - 1;
}
void push(int data) {
if (isFull()) {
std::cout << "Stack Overflow" << std::endl;
return;
}
arr[++top] = data;
}
int pop() {
if (isEmpty()) {
std::cout << "Stack Underflow" << std::endl;
return -1;
}
return arr[top--];
}
int peek() {
if (isEmpty()) {
std::cout << "Stack is empty" << std::endl;
return -1;
}
return arr[top];
}
};
int main() {
Stack stack;
stack.push(10);
stack.push(20);
stack.push(30);
std::cout << stack.pop() << std::endl;
std::cout << stack.pop() << std::endl;
std::cout << stack.peek() << std::endl;
return 0;
}
В этом примере класс Stack
представляет ADT. Он имеет частные элементы данных, такие как массив arr
для хранения элементов стека и top
для отслеживания индекса верхнего элемента. Класс предоставляет общедоступные методы, такие как isEmpty()
, isFull()
, push()
, pop()
, и peek()
для выполнения операций со стеком.
Метод push()
добавляет элемент в стек, pop()
удаляет и возвращает верхний элемент, peek()
возвращает верхний элемент, не удаляя его, isEmpty()
проверяет, пуст ли стек, а isFull()
проверяет, заполнен ли стек.
Выполнение примера кода приведет к выводу:
30
20
10
Это демонстрирует функциональность стека ADT.