work with the files and Nodes
Fri Dec 06 2024 20:50:23 GMT+0000 (Coordinated Universal Time)
Saved by @okkpurple
#include <iostream> #include <fstream> #include <string> #include <memory> struct Node { std::string line; int number; std::shared_ptr<Node> next; Node(std::string l = "", int n = 0) : line(l), number(n), next(nullptr) {} }; void read(std::shared_ptr<Node>& root) { std::ifstream reader("read.txt"); // cin if (reader.is_open() && !reader.eof()) { root = std::make_shared<Node>(); reader >> root->line >> root->number; auto tmp = root; while(!reader.eof()) { tmp->next = std::make_shared<Node>(); tmp = tmp->next; reader >> tmp->line >> tmp->number; } } } void type(std::shared_ptr<Node> root) { auto tmp = root; while (tmp) { std::cout << tmp->line << " " << tmp->number << std::endl; tmp = tmp->next; } } void remove(std::shared_ptr<Node>& root, int const number) { // for first root if (root->number == number) { root = root->next; return; } auto tmp = root; while (tmp->next && tmp->next->number != number) { tmp = tmp->next; } if (tmp->next) { tmp->next = tmp->next->next; } else { std::cout << "we didn' find this element" << std::endl; } } void insert(std::shared_ptr<Node>& root, int pos, const std::string& str, int val) { if (pos == 0) { std::shared_ptr<Node> new_root = std::make_shared<Node>(str, val); new_root->next = root; root = new_root; return; } auto tmp = root; for (int i = 1; tmp && i < pos; ++i) { tmp = tmp->next; } if (tmp) { std::shared_ptr<Node> new_node = std::make_shared<Node>(str, val); new_node->next = tmp->next; tmp->next = new_node; } } int main() { std::shared_ptr<Node> root; read(root); std::cout << "list:" << std::endl; type(root); insert(root, 0, "New first line", 10); std::cout << "\nuse insert to put new element to the first root:" << std::endl; type(root); insert(root, 2, "newline", 20); std::cout << "\njust use void insert:" << std::endl; type(root); remove(root, 10); std::cout << "\n delete root with value = 10:" << std::endl; type(root); return 0; }
Comments