1. 数据结构
顺序表使用物理位置的相邻关系表示数据间的邻接关系 (使用数组存储)
2. 代码实现(python)
2.1初始化
使用一个特定长度的数组(相当于一个容器)
class SeqList: #学会善于使用默认参数 def __init__(self,list=None,N=10): self.N=N self.data = [None] * N self.length = 0 if not list: return if len(list)>self.N: raise ValueError(f"数组长度超过 {self.N}") for i in range(len(list)): self.data[i]=list[i] self.length=len(list)
2.2 遍历顺序表
for循环遍历
class SeqList:
def PrintList(self):
if self.length==0:
print("空线性表")
for i in range(self.length):
print(self.data[i],end=' ')
print("线性表的长度为",self.length)
2.3 插入与删除操作
class SeqList:
def Insert(self,i:int,x): #将x插入第i个位置
if self.length>=self.N:
raise ValueError(f"上溢异常")
if i<1 or i>self.length:
raise ValueError(f"位置异常")
for j in range(self.length,i-1,-1):
self.data[j]=self.data[j-1]
self.data[i-1]=x
self.length+=1
def delete(self,i):
if self.length==0:
raise ValueError(f"下溢异常")
if i<1 or i>self.length:
raise ValueError(f"位置异常")
x=self.data[i-1]
for j in range(i,self.length):
self.data[j-1]=self.data[j]
self.length-=1
return x
2.4 按位查找与按值查找
class SeqList:
def Get(self,i):
if i<1 or i>self.length:
raise ValueError("查找位置非法")
return self.data[i-1]
def Locate(self,x):
for i in range(self.length):
if self.data[i]==x:
return i+1
return 0
3. 完整代码
class SeqList:
def __init__(self,list=None,N=10):
self.N=N
self.data = [None] * N
self.length = 0
if not list:
return
if len(list)>self.N:
raise ValueError(f"数组长度超过 {self.N}")
for i in range(len(list)):
self.data[i]=list[i]
self.length=len(list)
def PrintList(self):
if self.length==0:
print("空线性表")
for i in range(self.length):
print(self.data[i],end=' ')
print("线性表的长度为",self.length)
def Insert(self,i:int,x): #将x插入第i个位置
if self.length>=self.N:
raise ValueError(f"上溢异常")
if i<1 or i>self.length:
raise ValueError(f"位置异常")
for j in range(self.length,i-1,-1):
self.data[j]=self.data[j-1]
self.data[i-1]=x
self.length+=1
def delete(self,i):
if self.length==0:
raise ValueError(f"下溢异常")
if i<1 or i>self.length:
raise ValueError(f"位置异常")
x=self.data[i-1]
for j in range(i,self.length):
self.data[j-1]=self.data[j]
self.length-=1
return x
def Get(self,i):
if i<1 or i>self.length:
raise ValueError("查找位置非法")
return self.data[i-1]
def Locate(self,x):
for i in range(self.length):
if self.data[i]==x:
return i+1
return 0
4. 性能分析
优点
不需要为元素之间的逻辑关系分配额外的空间。
可以方便随机地访问元素。
缺点
插入和删除操作效率低。平均需要移动顺序表一半的元素。
难以选择合适的存储容量。并且要求连续的存储空间。分配空间过小(溢出)或者过大(闲置)