目录
目录
前言
学习内容:
- 线性表的概念
- 线性表的抽象数据类型定义
- 线性表的顺序表示和实现
- 线性表的链式表示和实现
- 顺序表和链表的比较
重点掌握:
- 顺序表
- 基本操作实现
- 各操作对应时间复杂度分析
- 链表
- 基本操作实现
- 各操作对应时间复杂度分析
2.1 线性表的概念和表抽象数据类型
线性表是最基本的数据结构,经常用作其他数据结构的实现基础。python内置的list和tuple,可以看作线性表的实现。
2.1.1 线性表的概念和性质
2.1.2 线性表抽象数据类型
线性表的操作:
表抽象数据类型:
2.1.3 线性表的实现
2.2 顺序表
内存及数据在内存中的存储方式:
2.2.1 顺序表的基本现实方式
插入数据(保序):
删除数据(保序):
顺序表的结构定义:
表抽象数据类型代码如下:
class ADTList:
def __init__(self):
self.maxn = 8
self.num = 0
self.elems = [8] * self.maxn
def is_empty(self):
return not self.num
def is_full(self):
return self.num == self.maxn
def len(self):
return self.num
def prepend(self,elem):
if self.num == self.maxn:
raise BufferError
else:
for i in range(self.num,-1,-1):
self.elems[i] = self.elems[i-1]
self.elems[0] = elem
self.num += 1
def append(self,elem):
if self.num == self.maxn:
raise BufferError
else:
self.elems[self.num] = elem
self.num += 1
def insert(self,elem,i):
if self.num == self.maxn:
raise BufferError
elif i > self.num:
print("insert losed!use append().")
return
else:
for j in range(self.num,i-1,-1):
self.elems[j] = self.elems[j-1]
self.elems[i-1] = elem
self.num += 1
def del_first(self):
for i in range(self.num):
self.elems[i] = self.elems[i+1]
self.num -= 1
def del_last(self):
if 0 == self.num:
print("Is emptyed")
return
else:
self.elems[self.num-1] = 0
self.num -= 1
def del_i(self,i):
if 0 == self.num or i >= self.num:
print("out of limt.")
return
else:
for j in range(i-1,self.len(),1):
self.elems[j] = self.elems[j+1]
self.num -= 1
def search(self,elem):
for i in range(self.num):
if elem == self.elems[i]:
return i
return -1
def forall(self,op):
pass
if __name__ == "__main__":
alst = ADTList()
alst.prepend(0)
alst.append(1)
alst.append(4)
alst.insert(3,2)
alst.insert(2,1)
alst.insert(6,3)
for i in range(alst.len()):
print(f"alst.elems[{i}]=",alst.elems[i])
print("-" * 10)
alst.del_first()
for i in range(alst.len()):
print(f"alst.elems[{i}]=",alst.elems[i])
print("-" * 10)
alst.del_last()
for i in range(alst.len()):
print(f"alst.elems[{i}]=",alst.elems[i])
print("-" * 10)
alst.del_i(3)
for i in range(alst.len()):
print(f"alst.elems[{i}]=",alst.elems[i])
print(alst.search(1))
print(alst.search(2))
2.2.2 Python中顺序表实现:
Python中list列表各操作的时间复杂度:
2.2.3 元素外置的顺序表
顺序表的两种形式:
需要扩容时,用分离式动态表:
顺序表的特点:
2.3 链表
2.3.1 链表概述:
2.3.2 单链表
单链表示例:
2.3.3 单链表的运算
单链表的建立和遍历操作:
代码如下:
单链表的特点: