両端キューDque

コンセプトデータ構造両端キュー

  デック(両端キューもいう)は、キューエントリの順序セットに似ています。これは、2つの端部、第一の部分と尾を持っており、コレクションに変更されていません。

  両端キュー特別は、追加および削除項目を非限定的です。あなたは、前面または背面に新しい項目を追加することができます。同様に、既存のアイテムはいずれかの端部から除去することができます。ある意味では、ハイブリッド線形構造は、単一のスタックデータ構造と、すべてのキューの能力を提供します。  

両端キュー抽象データ型定義:両端キューの抽象データ型以下の構造および動作によって定義されるべきです。どの追加し、頭や尾の両端から要素を削除することができます。両端キューは、以下の
  • Dqueは()新しい空の両端キューを作成します。これは、引数を取らず、空の両端キューを返します。
  • lpush(アイテム)は両端キューのヘッダに新しい項目を追加します。これは、アイテムのパラメータが何も返されませんかかります。
  • rpush(項目)は両端キューの末尾に新しいアイテムが追加されます。これは、アイテムのパラメータが何も返されませんかかります。
  • 両端キュー内の最初の項目を削除するには()LPOP。これは、引数を取らず、アイテムを返します。両端キューが変更されます。
  • RPOP()両端キューの末尾から項目を削除します。これは、引数を取らず、アイテムを返します。両端キューが変更されます。
  • かどうかのisEmpty()テスト両端キューが空です。これは、引数を取りませんし、ブール値を返します。
  • サイズは()両端キュー内の項目の数を返します。これは、パラメータを取らず、整数を返します。  

定義されたデック  

1クラスのDeque(オブジェクト):
 2デフ__init __(自己):
 3 self.deque = [] 
 4 
 5 DEF __str __(自己):
 6戻りSTR(self.deque)
 7 
 8デフrpush(自己、項目):
 9セルフ。 deque.append(アイテム)
10 
11 DEF(自己、項目)lpush:
12 self.deque.insert(0アイテム)
13 
14 DEF(自己)RPOP:
15戻りself.deque.pop()self.dequeそうであれば"デキューは空です!」
16 
17 DEF(自己)LPOP:
self.deque他の場合は18戻りself.deque.popは(0) "デキューは空です!" 
19 
20 DEFのisEmpty(自己):
21戻りself.deque == []  
22
23 DEFサイズ(自己): 
24リターンLEN(self.deque)

両端キューアプリケーションケース - 回文検査

回文検出:設計手順は、文字列が回文であるかどうかを検出します。

-回文:回文は、例えば、同じ最初と最後の文字を文字列読んでいますradar toot madam

- 分析:この問題を解決するには、文字列を格納する両端キューを使用することです。私たちは、左から右に文字列を扱う、そして両端キューの最後に各文字を追加します。この時点で、通常のキューのように両端キュー。しかし、我々は今、デュアルファンクション両端キューを利用することができます。両端キューに格納されている最初の文字列の最初の部分は、両端キュー尾は最後の文字が保存されます。我々は、彼らが継続して一致した場合にのみ、最後の文字を削除して比較することができます。試合が続くと最後の文字ができれば、我々は、元の文字列の長さに応じて、文字を使い果たし、または両端キュー1の大きさを残してのいずれかで終わる偶数か奇数です。いずれの場合も、文字列が回文です。

 1 from basic.deque import Deque
 2 
 3 def palchecker(aString):
 4     chardeque = Deque()
 5 
 6     for ch in aString:
 7         chardeque.addRear(ch)
 8 
 9     stillEqual = True
10 
11     while chardeque.size() > 1 and stillEqual:
12         first = chardeque.removeFront()
13         last = chardeque.removeRear()
14         if first != last:
15             stillEqual = False
16 
17     return stillEqual
18 
19 print(palchecker("lsdkjfskf"))
20 print(palchecker("radar"))
双端队列解决回文字符串

 

おすすめ

転載: www.cnblogs.com/open-yang/p/11367019.html