資料結構是 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...