Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ออกแบบไดเรกทอรีโทรศัพท์ใน C++


สมมติว่าเราต้องการออกแบบไดเรกทอรีโทรศัพท์ที่รองรับการดำเนินการต่อไปนี้ −

  • get − จะให้หมายเลขที่ยังไม่ได้มอบหมายให้ใคร

  • check − จะตรวจสอบว่าหมายเลขว่างหรือไม่

  • release − จะรีไซเคิลหรือปล่อยหมายเลข

ใช้ initializer เพื่อกำหนดหมายเลข n ตัวในตอนแรก

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้ −

  • กำหนดเซต s

  • กำหนดคิว available

  • initializer จะรับ maxNumbers

  • N := maxNumbers

  • ลูป i := 0 ถึง N-1 ทำ −

    • แทรก i ลงใน available

  • กำหนดฟังก์ชัน get()

  • ถ้าขนาดของ available เป็น 0 แล้ว −

    • คืนค่า -1

  • x := สมาชิกแรกของ available

  • แทรก x ลงใน s

  • ลบสมาชิกออกจาก available

  • คืนค่า x

  • กำหนดฟังก์ชัน check() รับ number

  • ถ้า number >= N หรือ number < 0 แล้ว −

    • คืนค่า false

  • คืนค่า true ถ้า number ไม่อยู่ใน s

  • กำหนดฟังก์ชัน release() รับ number

  • ถ้า check(number) แล้ว −

    • คืนค่า

  • x := number

  • ลบ x ออกจาก s

  • แทรก x ลงใน available

ตัวอย่าง

ลองดูการติดตั้งต่อไปนี้เพื่อให้เข้าใจได้ดีขึ้น −

#include <bits/stdc++.h> using namespace std; class PhoneDirectory { public:    set<int> s;    queue<int> available;    int N;    PhoneDirectory(int maxNumbers){       N = maxNumbers;       for (int i = 0; i < N; i++) {          available.push(i);       }    }    int get(){       if (available.size() == 0)          return -1;       int x = available.front();       s.insert(x);       available.pop();       return x;    }    bool check(int number){       if (number >= N || number < 0)          return false;       return s.find(number) == s.end();    }    void release(int number){       if (check(number))          return;       int x = number;       s.erase(x);       available.push(x);    } }; main(){    PhoneDirectory ob(3);    cout << (ob.get()) << endl;    cout << (ob.get()) << endl;    cout << (ob.check(2)) << endl;    cout << (ob.get()) << endl;    cout << (ob.check(2)) << endl;    ob.release(2);    cout << (ob.check(2)) << endl; }

อินพุท

ob.get(); ob.get(); ob.check(2); ob.get(); ob.check(2); ob.release(2); ob.check(2);

เอาต์พุท

0 1 1 2 0 1