6-Python 數據結構初識

課程概要:
  1、Python 數據結構概述
  2、Python 常見數據結構——棧
  3、Python 常見數據結構——隊列

1、Python 數據結構概述

知識點:
  ◆ 什么是數據結構?
  ◆ 數據結構實例
  ◆ 數據結構與算法的關系

一、什么是數據結構?

我們知道,一個程序里面必然會有數據存在,同樣的一個或幾個數據要組織起來,可以有不同的組織方式,也就是不同的存儲方式。不同的組織方式就是不同的結構,我們把這些數據組織在一起的結構稱之為數據的結構,也叫做數據結構。比如,有一字符串是”abc”,我們將其重新組織一下,比如通過list() 函數將”abc”變成[“a”, “b”, “c”],那么這個時候數據就發生了重組,重組之后數據的結構就變了,變成了了[“a”, “b”, “c”],我們把這種形式的數據的結構叫做列表,也就是說列表是數據結構中一種類型之一。數據結構除了列表之外,還有元組、字典、隊列、棧、樹等等。Python 中數據的組織方式叫做Python
的數據結構。

二、數據結構實例

Python 中的數據結構有非常多種類型。其中,Python 中系統自己定義好的,不需要我們自己去定義的數據結構叫做Python 的內置數據結構,比如列表、元組等,而有些數據組織方式,Python 系統里面沒有直接定義,需要我們自己去定義實現這些數據的組織方式,這些數據組織方式稱之為Python 的擴展數據結構,比如棧,隊列等。

Python 內置的數據結構有元組、列表、字典等

【實例】現在有三個物品,分別是"apple", "orange","pear" 需要將這三個物品存儲起來

["apple", "orange", "pear"]     #       元素可更改

("apple", "orange", "pear")      #       元素不可更改
 
{"Sam":"apple", "Jac"
"orange", "Mating":"pear"}

三、數據結構與算法的關系

我們會發現Python 的數據結構經常與算法合在一起講,但是我們是否想過,為什么要將數據結構與算法放在一起講呢?剛才我們也說過了,數據結構就是數據的組織方式,就是數據存儲的方式,也就是說,數據結構是靜態的。算法是指運算方法,通俗的說,算法就是思維。我們編寫的程序,是動態的,我們需要將數據進行計算,那么我們如何運算呢?運算方法有很多,不同的運算方法叫做不同的算法。比如1 +7 + 9 的計算方法。也就是說算法是動態的,是指運算的思維方法。當然我們的算法不是憑空出來的,它必須建立在數據的基礎上,所以數據結構是算法的基礎,但相同的數據結構運用不同的算法擁有不同的效率。


2、Python 常見數據結構-棧

知識點:

  • 什么是棧
  • 棧的圖示
  • Python的棧的實現

一、什么是棧

首先,棧是一種數據結構。這種數據結構在Python中不是內置數據結構,屬于擴展數據結構。這種數據結構具有這些特點:首先,棧相當于一端開口一端封閉的容器,數據A可以存儲在棧里面,把數據A移動到棧里面這個過程叫做進棧,也叫壓棧、入棧,數據A進入到棧里面之后,就到了棧頂,同時占了棧的一個位置。當再進入一個數據B的時候,也就是再將一個數據入棧的時候,這個時候,新的數據就占據了棧頂的位置,原來的數據就被新的數據壓入到了棧頂的下一個位置里。棧只能對其棧頂的數據進行操作,可以將其出棧或刪除等。等數據B出棧后,方可對A進行操作。

二、棧的圖示

</br>

三、Python中棧的實現

【代碼】

# -*- coding:utf8 -*-
# 棧的實現
# st 棧的主體       size 棧的容量

class Stack():
    def __init__(st, size):
        st.stack=[]
        st.size=size
        st.top=-1

    def push(st, content):
        if st.Full():
            print "Stack is Full"
        else:
            st.stack.append(content)
            st.top=st.top+1

    def out(st):
        if st.Empty():
            print "Stack is Empty"
        else:
            st.top=st.top-1
        
    def Full(st):
        if st.top==st.size:
            return True
        else:
            return False

   def Empty(st):
        if st.top==-1:
            return True
        else:
            return False

【輸出】

>>> q=Stack(7)
>>> q.Empty()
True
>>> q.push("hello")
>>> q.Empty()
False
>>> q.out()

3、Python常見數據結構-隊列

知識點:

  • 什么是隊列
  • 隊列的圖示
  • Python中隊列的實現

一、什么事隊列

首先,隊列也是一種數據結構。這種數據結構也是擴展的數據結構。這種數據結構具有這些特點:首先,隊列相當于兩端都開的容器,但是一端只能進行刪除操作,不能進行插入操作,而另一端只能進行插入操作而不能進行刪除操作,進行插入操作的這端叫做隊尾,進行刪除操作的這端叫做隊首。所以隊列中大家要記住這一點:數據是從隊尾進隊首出的。

二、隊列的圖示

</br>

三、Python中隊列的實現

【代碼】

# -*- coding:utf8 -*-
# 隊列的實現
# qu 隊列的主體       size 隊列的容量

class Queue():
    def __init__(qu, size):
        qu.queue=[]
        qu.size=size
        qu.head=-1
        qu.tail=-1

    def Empty(qu):
        if qu.head==qu.tail:
            return True
        else:
            return False

    def Full(qu):
        if qu.tail-qu.head+1==qu.size:
            return True
        else:
            return False

    def enQueue(qu, content):
        if qu.Full():
            print "Queue is Full"
        else:
            qu.queue.append(content)
            qu.tail=qu.tail+1

    def outQueue(qu):
        if qu.Empty():
            print "Queue is Empty"
        else:
            qu.head=qu.head+1

【輸出】

>>> q=Queue(6)
>>> q.Empty()
True
>>> q.enQueue("python")
>>> q.Empty()
False
>>> q.outQueue()
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容