C++電話簿設計


假設我們想設計一個支援以下操作的電話簿:

  • get - 獲取一個未分配的號碼。

  • check - 檢查一個號碼是否可用。

  • release - 回收或釋放一個號碼。

可以使用初始化器一開始初始化n個號碼。

為了解決這個問題,我們將遵循以下步驟:

  • 定義一個集合s

  • 定義一個佇列available

  • 初始化器將接收maxNumbers。

  • N := maxNumbers

  • for 初始化 i := 0, 當 i < N, 更新 (i 加 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

  • 從s中刪除x

  • 將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

更新於:2020年11月19日

505 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告