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

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


สมมติว่าเราต้องการออกแบบ Phone Directory ที่รองรับการทำงานดังต่อไปนี้ -

  • get - จะให้หมายเลขที่ไม่ได้กำหนดให้กับใครเลย

  • ตรวจสอบ - นี้จะตรวจสอบว่ามีหมายเลขหรือไม่

  • release - สิ่งนี้จะรีไซเคิลหรือปล่อยหมายเลข

โดยใช้ initializer เราสามารถเริ่มต้นได้ n ตัวเลขในตอนแรก

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

  • กำหนดหนึ่งชุด s

  • กำหนดคิวว่าง

  • ตัวเริ่มต้นจะใช้ maxNumbers

  • ไม่มี :=maxNumbers

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • ใส่ i เข้าไป

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

  • ถ้าขนาดของที่มีอยู่เท่ากับ 0 แล้ว −

    • กลับ -1

  • x :=องค์ประกอบแรกที่มีอยู่

  • ใส่ x ลงใน s

  • ลบองค์ประกอบออกจากที่พร้อมใช้งาน

  • ผลตอบแทน x

  • กำหนดฟังก์ชัน check() ซึ่งจะใช้ตัวเลข

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

    • คืนค่าเท็จ

  • คืนค่าจำนวนจริงไม่อยู่ใน s

  • กำหนดฟังก์ชั่น release() ซึ่งจะใช้ตัวเลข

  • ถ้าตรวจสอบ (หมายเลข) แล้ว −

    • กลับ

  • x :=ตัวเลข

  • ลบ x ออกจาก s

  • ใส่ x เข้าไป

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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