データ構造とアルゴリズムのスタックキュー両端キュー

スタック

  • 特長:最後のアウトのデータ構造
  • スタックの最上位、スタック尾
  • アプリケーション:各Webブラウザは、戻るボタンがあります。あなたがウェブを閲覧すると、これらのページは、スタック(ページの実際のURL)に配置されています。あなたは今、一番上にあなたが一番下に表示される最初のページをウェブページを参照してください。あなたは「戻る」ボタンを押すと、単にページを閲覧順序が逆になります。

---------------------

  • スタックは、()新しい空のスタックを作成します。これは、引数を取らず、空のスタックを返します。
  • プッシュ(項目)は、スタックの一番上に新しい項目が追加されます。それは何も返さない項目のパラメータを行う必要があります。
  • ポップ()スタックから先頭の項目を削除します。これは、引数を取らず、アイテムを返します。スタックが変更されました。
  • PEEK()はスタックから一番上のアイテムを返しますが、それを削除しません。引数はありません。スタックを変更しません。
  • isEmpty()かどうかをテストこのスタックが空の場合。引数とブール値を返しません。
  • サイズは()スタック内のアイテムの数を返します。引数と整数を返しません。
クラススタック():
    デフ__init __(自己):
        self.items = [] 添加数据进栈
    デフプッシュ(自己、アイテム):
        self.items.append(アイテム)
    #取出数据出栈
    デフポップ(自己):
        リターンself.items.pop()
  
    DEFのisEmpty(自己):
        戻り self.items == [] 
DEFサイズ(自己):
戻りLEN(self.items)を
DEF(自己)覗く:
戻り self.items [LEN(self.items ) - 1 ]
DEF(自己)を示す:
リターンself.items スタック = スタック() stack.push(1 stack.pushを(2 stack.push(3 プリント(stack.show()) プリント(stack.pop()) プリント(stack.pop()) プリント(stack.peek()) プリント(stack.isEmpty() )

Webアクセスのシミュレーション

= S スタック()
DEFのGetRequest(URL):
    s.push(URL)
DEF showcurrenturl():
    印刷(' 現在のページ' 、s.peek())
DEFバック():
    s.pop()
    印刷(バックオフURLを表示するには、ボタンをクリックします。's.peek()) 
のGetRequest(' www.1.com ' 
のGetRequest(' www.2.com ' 
のGetRequest(' www.3.com ' 
のGetRequest(' WWW。 4.com " 
showcurrenturl()
showcurrenturl()
バック()
showcurrenturl()


 
戻ります()
バック()

キュー

  • キュー:FIFO
  • シナリオ:
    • 当社のコンピュータラボは30台のコンピュータとプリンタのネットワークを持っています。学生は他のすべての印刷ジョブとその印刷ジョブを印刷したいときを待っている「一貫し。」最初のタスクは、エントリを完了することです。あなたが最後のものであれば、あなたは他のすべてのタスクを印刷の前であなたを待つ必要が

 

 

  • 新しい空のキューを作成するためのキュー()。これは、パラメータを取らず、空のキューを返します。
  • 末尾に新しい項目を追加するためのエンキュー(項目)。それは何も返さない、引数としてアイテムが必要です。
  • デキューは()キューの先頭から項目を削除します。これは、引数を取らず、アイテムを返します。キューが変更されます。
  • isEmpty()キューが空であるかどうかを確認します。これは、引数を取りませんし、ブール値を返します。
  • サイズは()キュー内の項目の数を返します。これは、パラメータを取らず、整数を返します。

 

 

クラスキュー():
    DEF __init __(自己):
        self.items = [] 
    DEFエンキュー(自己、項目):
        self.items.insert(0 、項目)
    DEFデキュー(自己):
        戻りself.items.pop()
    DEF isEmpty(自己):
        戻り self.items == [] 
    DEFサイズ(自己):
        戻りLEN(self.items)を

    DEF示す(自己):
        戻りself.items 


Q = キュー()
q.enqueue(1 
q.enqueue (2 
q.enqueue(3 
プリント(q.show())

プリント(q.dequeue())
プリント(q.dequeue())

印刷(q.isEmpty())
プリント(q.size())
結果:
[ 321 ]
 。1 
2 
1。
  • ケース:ホットポテト
    • ホットポテトゲーム:サークル内の6人の子供の包囲は、子ども自身の順序を指定します。ホットポテトの手の最初の子は、サツマイモは、タイミング1秒タイマーがその次の子に渡されており、必要になります。ルールは、タイマーは7秒ごとにカウントすると、そのゲームのうちジャガイモの子供たちの手です。子の最後まで試合の残りの部分は、最後に残った子が勝ち。最終的に勝ついくつかの場所に来て、ゲームのキュー実装戦略を使用してください。
  • 結論:
    • 7秒の瞬間にした後、ジャガイモは6回を渡されます。
    • ジャガイモの子供たちの手は常にキューの先頭に立つ保証

 

= Q キュー()
キッズ = [ ' A '' B '' C '' D '' E '' F ' ]
 のためのキッド子供:
    q.enqueue(キッド)
#プリント(q.show( ))
中の q.size()> 1。  I におけるレンジ(6。 ):
        内部ループは、チームのポテトヘッドに子供の手を排出するために使用されている
        子供 = q.dequeue()
        q.enqueueを(子供)
    q.dequeue()

印刷(q.dequeue()) 
電子結果

 

 

両端キュー

  • 同じ列と比較すると、2つのヘッドとテールがあります。あなたは、デュアルポートに単一のデータ構造特性スタックとキューをデータを挿入および削除することができます
 
  • 新しい空の両端キューを作成するには、両端キュー()。これは、引数を取らず、空の両端キューを返します。
  • addFront(アイテム)は両端キューのヘッダに新しい項目を追加します。これは、アイテムのパラメータが何も返されませんかかります。
  • addRear(項目)は両端キューの末尾に新しいアイテムが追加されます。これは、アイテムのパラメータが何も返されませんかかります。
  • removeFrontは()両端キュー内の最初の項目を削除します。これは、引数を取らず、アイテムを返します。両端キューが変更されます。
  • removeRear()両端キューの末尾から項目を削除します。これは、引数を取らず、アイテムを返します。両端キューが変更されます。
  • かどうかのisEmpty()テスト両端キューが空です。これは、引数を取りませんし、ブール値を返します。
  • サイズは()両端キュー内の項目の数を返します。これは、パラメータを取らず、整数を返します。

 

 

クラスデキュー():
    DEF __init __(自己):
        self.items = [] 

    キューの先頭から#挿入データ
    DEF addFront(セルフ、項目):
        self.items.insert(0 、項目)

    キューデータの尾部から挿入#
    デフaddRear (セルフ、項目):
        self.items.append(項目)

    #のHOL素子取ら
    DEF removeFront(自己):
        戻りself.items.pop()

    尾部を有する要素の#
    DEF removeRear(セルフ):
        戻り self.items.pop (0 

    DEFサイズ(自己):
        戻りLEN(self.items)


Q = デキュー()
q.addFront(1。 
q.addFront(2 
q.addFront(3 

プリント(q.removeFront())
プリント(q.removeRear())

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

  • 回文はマダム警笛例えば、レーダー、同じ最初と最後の文字を読み、文字列です。
デフhuiwen(S): = デキュー()
    フラグ = Trueの
     ためのS:
        de.addFront(I)
     de.size()> 1 もし de.removeFront()!= de.removeRear():
            フラグ = FALE
     リターンフラグ
プリント(huiwen(' abcdcba '))

 

おすすめ

転載: www.cnblogs.com/XLHIT/p/11360648.html