Привет! Сегодня хочу рассказать о том, как я организовал динамические структуры данных в языке C и с их помощью сохранил последовательность вещественных чисел в динамическом списке. Далее я извлек отрицательные числа из этого списка и поместил их в стек.Для начала, я объявил структуру Node, которая представляет узел списка⁚
cpp
struct Node {
float data;
Node* next;
};
Затем я создал класс DynamicList для реализации динамического списка⁚
cpp
class DynamicList {
private⁚
Node* head;
public⁚
DynamicList {
head nullptr;
}
void insert(float value) {
Node* newNode new Node;
newNode->data value;
newNode->next head;
head newNode;
}
void print {
Node* current head;
while (current ! nullptr) {
cout << current->data << ″ ″;
current current->next;
}
cout << endl;
}
void deleteNegative {
Node* current head;
Node* prev nullptr;
while (current ! nullptr) {
if (current->data < 0) {
if (prev nullptr) {
head current->next;
} else {
prev->next current->next;
}
delete current;
current prev;
}
prev current;
current current->next;
}
}
};
Теперь, чтобы использовать динамический список, я создал экземпляр класса и добавил несколько чисел в список⁚
cpp
DynamicList list;
list.insert(8.5);
list.insert(-3.2);
list.insert(0);
list.insert(-7.8);
list.insert(5.6);
Затем я вызвал функцию print, чтобы убедиться, что числа были успешно добавлены в список⁚
cpp
list.print;
На этом этапе список должен быть напечатан на экране в таком виде⁚ ″5.6 0 -7.8 -3.2 8.5″. Убедившись, что список содержит все нужные числа, я вызвал функцию deleteNegative, чтобы удалить все отрицательные числа из списка⁚
cpp
list.deleteNegative;
Затем я создал класс Stack для реализации стека⁚
cpp
class Stack {
private⁚
float* arr;
int top;
int capacity;
public⁚
Stack(int max_size) {
capacity max_size;
arr new float[capacity];
top -1;
}
void push(float value) {
if (top 1 > capacity) {
cout << ″Stack overflow!″ << endl;
return;
}
arr[ top] value;
}
cout << arr[i] << ″ ″; } cout << endl; } }; Наконец, чтобы поместить отрицательные числа из списка в стек, я создал экземпляр класса Stack и использовал цикл для добавления отрицательных чисел в стек⁚ cpp Stack stack(listSize); // где listSize ー размер исходного списка Node* current list.head; while (current ! nullptr) { if (current->data < 0) { stack.push(current->data);
}
current current->next;
}
После завершения цикла функция print позволяет вывести содержимое стека на экран⁚
cpp
stack.print;
Теперь все отрицательные числа из исходного списка должны быть помещены в стек и напечатаны в обратном порядке.
Это был мой опыт организации динамических структур данных в языке C и использования списка и стека для различных операций со значением. Надеюсь, эта информация тебе пригодится!