線性結構 線性表

2021-09-26 07:41:37 字數 4391 閱讀 9752

資料結構是 adt(abstract data type,資料抽象型別)的物理實現。

什麼是線性表?

線性表:由同型別的資料元素構成有序序列的線性結構

兩種實現模型:順序表,鍊錶

資料物件集:n個元素構成的有序序列

初始化鍊錶 _ init _

返回鍊錶長度 _ len _

判斷為空 is_empty

指定位置新增 insert

刪除第i個結點 delete

表的遍歷 elements該方法通過生成器定義了乙個迭代器,就可以使用形如for x in list.elements():的迴圈了

篩選器 filt定義乙個迭代器,篩選出滿足一定條件的元素

輸出鍊錶元素 printall

鍊錶合併 _ add _

class

indexerror

(valueerror)

: pass

class

linkedlistunderflow

(valueerror)

: pass

class

lnode()

: def __init__

(self,elem,next_=none)

: self.elem = elem

self.next = next_

def __str__

(self)

:return

str(self.elem)

class

llist()

: def __init__

(self)

: self._head = none

self._length =

0

def __len__

(self)

:return self._length

def is_empty

(self)

:return self._head is none

def find

(self,i):""

"find the ith node"

""if i>=self._length:

raise indexerror

("out of range"

)else

: p = self._head

while i>0:

p = p.next

i -=

1return p

(self,elem)

: # 為新元素建立新結點

n_node =

lnode

(elem)

# 找到鍊錶最後乙個元素

if self.

is_empty()

: #是否為空鍊錶

self._head = n_node

else

: p = self._head

while p.next:

p = p.next

p.next = n_node

self._length +=

1

def insert

(self,elem,i)

: # 為新元素建立新結點

n_node =

lnode

(elem)

# 找到第i-

1個元素

if i >= self._length:

raise indexerror

("out of range"

)if self.

is_empty()

: #是否為空鍊錶

self._head = n_node

return

if i==0:

n_node.next = self._head

self._head = n_node

#self._head, n_node.next = n_node, self._head

else

: p = self.

find

(i-1

) n_node.next = p.next

p.next = n_node

# p.next, n_node.next = n_node, p.next

self._length +=

1

def delete

(self,i):""

"delete the ith node"

""if self.

is_empty()

: #無節點,引發異常

raise linkedlistunderflow

('in delete'

)if i==0:

self._head = self._head.next

else

: p = self.

find

(i-1

) p.next = p.next.next

self._length -=

1 def elements

(self):""

"this method enable the realization of for loop"

"" p = self._head

while p:

yield p.elem

p = p.next

def filt

(self,proc):""

"proc is a function. for example, a lambda expression"

"" p = self._head

while p:

ifproc

(p.elem)

:yield p.elem

p = p.next

def printall

(self)

: p = self._head

while p:

print

(p,end='')

if p.next:

print

(', '

,end='')

p = p.next

print

() # 輸出回車

def __add__

(self,other)

:if not isinstance

(other,llist)

: raise typeerror

("the argument must be a llist"

) s = other._head

p = self.

find

(len

(self)-1

) p.next = s

return self

list =

llist()

for i in

range(2

,11):

list.

(i)list.

printall()

print

(list.

find(3

))list.

delete(5

)list.

printall()

list.

insert(0

,5)list.

printall()

print

(len

(list)

)a =

[x**

2for x in list.

elements()

]print

(a)for x in list.

filt

(lambda y: y%2==

0):print

(x,end=

' ')

print()

list2 =

llist()

for i in[11

,12,13

]:list2.

(i)print

("****list3****"

)list3 = list+list2

list3.

printall

()

線性結構 線性表

線性結構 線性表 棧 佇列 串和陣列 線性結構的特點 除了第乙個元素和最後乙個元素外,每個資料元素有乙個前驅和乙個後繼,線性表是最簡單 最基本 最常用的資料結構,它有順序儲存和鏈式儲存兩種儲存方案 線性表是n個資料元素的有限序列,在表中,元素之間存在著線性的邏輯關係 特點 同一性 線性表由同類元素組...

線性結構 線性表

由同型別資料元素構成有序序列的線性結構 list makeempty int find elementtype x,list ptrl void insert elementtype x,int i,list ptrl if i 1 i ptrl last 2 for j ptrl last j i...

1 線性結構 線性表

由同型別資料元素構成有序序列的線性結構。利用陣列的連續儲存空間順序存放線性表的個元素。typedef struct lnode list struct lnode struct lnode l list ptrl 初始化 建立空的順序表 list makeempty 查詢int find eleme...