Computer >> Máy Tính >  >> Lập trình >> C ++

Thiết kế danh bạ điện thoại bằng C ++

Giả sử chúng ta muốn thiết kế Danh bạ điện thoại hỗ trợ các hoạt động sau -

  • get - Điều này sẽ cung cấp một số không được chỉ định cho bất kỳ ai.

  • kiểm tra - Điều này sẽ kiểm tra xem một số có sẵn hay không.

  • phát hành - Điều này sẽ tái chế hoặc giải phóng một số.

Sử dụng trình khởi tạo, chúng ta có thể khởi tạo n số đầu tiên

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một bộ s

  • Xác định một hàng đợi có sẵn

  • Trình khởi tạo sẽ lấy maxNumbers.

  • N:=maxNumbers

  • để khởi tạo i:=0, khi i

    • chèn tôi vào có sẵn

  • Định nghĩa một hàm get ()

  • nếu kích thước có sẵn bằng 0, thì -

    • trả về -1

  • x:=phần tử đầu tiên có sẵn

  • chèn x vào s

  • xóa phần tử khỏi có sẵn

  • trả lại x

  • Xác định một kiểm tra hàm (), điều này sẽ lấy số,

  • nếu số> =N hoặc số <0, thì -

    • trả về false

  • trả về số true không có trong s

  • Xác định một bản phát hành hàm (), điều này sẽ lấy số,

  • nếu kiểm tra (số), thì -

    • trở lại

  • x:=số

  • xóa x khỏi s

  • chèn x vào có sẵn

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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;
}

Đầu vào

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

Đầu ra

0
1
1
2
0
1