Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <string>
- #include <iostream>
- using namespace std;
- //300007
- struct list{
- int element;
- list* next;
- };
- struct set{
- list* a[300007];
- set(){
- for (int i = 0; i < 300007; i++)
- a[i] = nullptr;
- }
- void Insert(int el){
- list *findEl = a[abs(el) % 300007];
- list *prevEl = findEl;
- while (findEl != nullptr && findEl->element != el) {
- prevEl = findEl;
- findEl = findEl->next;
- }
- if (findEl == nullptr) {
- list *newElement = new list;
- newElement->next = nullptr;
- newElement->element = el;
- if (prevEl == nullptr) {
- a[abs(el) % 300007] = newElement;
- }
- else {
- prevEl->next = newElement;
- }
- }
- }
- int Exists(int el) {
- list *findEl = a[abs(el) % 300007];
- while (findEl != nullptr && findEl->element != el) {
- findEl = findEl->next;
- }
- if (findEl != nullptr && findEl->element == el)
- return 1;
- else
- return 0;
- }
- void Delete(int el){
- list* findEl = a[abs(el) % 300007];
- list* prevEl = a[abs(el) % 300007];
- int flag = 1;
- while(findEl != nullptr && findEl -> element != el){
- prevEl = findEl;
- findEl = findEl -> next;
- }
- if (findEl != nullptr && findEl -> element == el){
- if (findEl == a[abs(el) % 300007])
- a[abs(el) % 300007] = findEl -> next;
- else
- prevEl -> next = findEl -> next;
- delete(findEl);
- }
- }
- };
- int main(){
- ifstream in;
- ofstream out;
- in.open("set.in");
- out.open("set.out");
- set Set;
- while(!in.eof()){
- string com;
- int element;
- in >> com;
- if (com.size() == 0)
- break;
- in >> element;
- if (com == "insert"){
- Set.Insert(element);
- }
- if (com == "exists"){
- if(Set.Exists(element))
- out << "true\n";
- else
- out << "false\n";
- }
- if (com == "delete"){
- Set.Delete(element);
- }
- }
- in.close();
- out.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement