データ構造_python_スタック


1.スタック(stack)、出入りあり、順序構造とチェーンテーブル構造がある.操作に進歩があり,線形構造の関係を形成した.(1)メモリに格納されている位置は、ポインタの指向によって接続されたブロックであってもよいチェーンテーブル構造.メモリは柔軟に運用できますが、アルゴリズムは複雑です.(2)シーケンス構造は,配列で実現されるので比較的簡単であるが,配列サイズは事前に計画されており,メモリを大きく浪費し,小さくては不十分である.
2.スタックの動作は常にスタックトップで行われ、それぞれ圧入(push)、ポップアップ(pop)操作を用いてデータの書き込みと読み取りが行われる.
3.行列をスタックにたとえると、チェーンテーブルの構造は銀行の番号取り行列で、順番の構造は食堂の食事窓口が並んでいる.隊尾は桟の頂上で、隊尾のあの人は行って弾いて、隊尾はまた一人が来て押し込んで、それではあの人は新しい桟の頂上です.
4.実装(1)用配列実装:配列実装スタック(2)用チェーンテーブル実装:
import numpy as np
class Node():
    def __init__(self):
        self.data=0#  
        self.next=None#  

top=None

def is_empty():
    if top==None:
        return True
    else:
        return False

def push(data):
    global top
    new_data=Node()
    new_data.data=data
    # print("t0",top)
    new_data.next=top# new_data       ,                  new_data.next
    # print("t1",top)
    top=new_data# top     
    # print("t3",top)

#           
for i in range(10):
    # print(i)
    # print()
    push(np.random.randint(1,10))

def show_element():
    global top
    temp_list=[]
    while top!=None:
        ptr = top
        temp = ptr.data
        temp_list.append(temp)
        top = top.next
    print(temp_list)
    temp_list.reverse()
    for data in temp_list:
        push(data)

def pop():
    global top
    if is_empty():
        print("  ,    ")
    else:
        ptr=top
        temp=ptr.data
        top=top.next
        print(temp)
operate=4
while operate!=0:
    print("       1,       2,             3,     0")
    operate=int(input("  :"))
    if operate==1:
        data=int(input("       :"))
        push(data)
    elif operate==2:
        pop()
    elif operate==3:
        show_element()