用Python寫乙個簡單的單向鍊錶(包含頭尾指標)

2021-06-13 10:42:14 字數 3002 閱讀 2710

最近學習資料結構,大部分以c語言為主,所以想嘗試一下用python編寫,感覺指標和類實現思維上還是差距蠻大的

# -*- coding: utf-8 -*-

"""created on mon apr 01 22:20:44 2013

@author: zzcwing

"""class listnode: ##定義乙個node的資料型別,包含data和nextnode

data=none

nextnode=none

def __init__(self,lndata):

self.data=lndata

class slist: ##定義乙個list的資料型別,鍊錶長度(listsize) 頭鍊錶(head)和尾鍊錶(tail)

listsize=0

head=none

tail=none

def __init__(self): ##初始化 將頭鍊錶和尾鍊錶及鍊錶長度清空

self.head=none

self.tail=none

self.listsize=0

def insertdata(self,value): ##插入鍊錶,始終插入到鍊錶尾部

newnode=listnode(value) ##建立乙個插入鍊錶的物件

if self.head is none: ##如果煉表頭為空,既鍊錶本身為空,head和tail均為插入鍊錶

self.head=newnode

self.tail=newnode

self.tail.nextnode=none ##鍊錶尾部指向none

self.listsize=self.listsize+1 ##鍊錶長度加1

else:

wnode=self.head ##如果head不為空

while wnode.nextnode is not none: ##遍歷鍊錶直到找到尾鍊錶

wnode=wnode.nextnode

wnode.nextnode=newnode ##插入到鍊錶尾部

self.tail=newnode ##插入鍊錶作為尾鍊錶

self.tail.nextnode=none ##尾鍊錶指向none

self.listsize=self.listsize+1 ##鍊錶長度加1

def deldata(self,value):##刪除鍊錶,始終插入到鍊錶尾部

if self.head is none: ##如果鍊錶為空,即頭鍊錶為空,pass

pass

elif self.head.data==value: ##如果頭煉錶即為所要刪除的值

tmpnode=self.head ##將頭鍊錶賦值給乙個臨時node

self.head=self.head.nextnode ##頭鍊錶指向原頭鍊錶的下乙個node

tmpnode=none ##清空臨時node

self.listsize=self.listsize-1 ##鍊錶長度-1

else: #如果鍊錶不為空,且頭鍊錶不為空,鍊錶長度至少》=1

wnode=self.head.nextnode ##定義乙個node,從頭鍊錶開始遍歷,尋找要刪除值所在的node

while (wnode is not none) and (wnode.data!=value):

pnode=wnode ## 儲存遍歷過程中的前乙個node

wnode=wnode.nextnode

if wnode!=none: ##如果node此時不為空,意味著鍊錶中存在我們要刪除的node

if wnode.nextnode is none: ##如果node是尾鍊錶

self.tail=pnode ##將尾鍊錶指向pnode(要刪除值所在node的前乙個node)

tmpnode=wnode ##將頭鍊錶賦值給乙個臨時node

pnode.nextnode=wnode.nextnode #將pnode指向node原本指向的下乙個node

tmpnode=none ##清空臨時node

self.listsize=self.listsize-1 ##鍊錶長度-1

def listpint(self):

if self.listsize==0: #如果鍊錶長度為0 顯示無鍊表

print "no data in list"

else:

##將node重置到頭鍊錶開始遍歷

wnode=self.head

while (wnode is not none):

print "--->",wnode.data ##列印所有node

wnode=wnode.nextnode

if __name__=='__main__':

link=slist()

link.insertdata(1)

link.insertdata(2)

link.insertdata(3)

link.insertdata(4)

link.listpint()

print "the size of list is",link.listsize

print "the head of list is ",link.head.data,"the tail of the list is",link.tail.data

print ""

link.deldata(4)

link.deldata(1)

link.listpint()

print "the size of list is",link.listsize

print "the head of list is ",link.head.data,"the tail of the list is",link.tail.data

執行結果:

用python寫乙個簡單的視窗

import sys if name main 建立乙個視窗 w qwidget 設定視窗的尺寸 w.resize 400,200 移動視窗 w.move 300,300 設定視窗的標題 w.setwindowtitle 第乙個基於pyqt5的桌面應用 顯示視窗 w.show 進入程式的主迴圈 並通...

ROS 用Python寫乙個簡單服務

一.編寫服務資料 在功能包的頂級目錄中,建立srv資料夾,並在裡面建立.srv檔案 先成為a.srv 在srv檔案中,填入服務資料,如 int64 a int64 b int64 sum其中,上方是請求資料,下方是答應資料 二.修改cmakelist和package.xml cmakelist ca...

用python寫乙個簡單的彈球遊戲

用python寫乙個簡單的彈球遊戲,可以使用球拍接住球讓球在邊框內不停的彈動,如果球拍沒有接住則遊戲結束 我們需要匯入tkinter模組來建立畫布 匯入時間模組來控制球的速度,就是控制球移動的間隔時間 匯入隨機模組使球彈的方向是隨機的。fromtkinterimport importtime imp...