#a: 列表,pos: 要插入的位置,key: 要插入的数据,n: 列表中已有数据长度definsert(a, pos, key, n):
i = n -1while i >= pos:
a[i +1]= a[i]
i -=1
a[pos]= key
return n +1if __name__ =='__main__':
a =[None]*10
n =int(input("请输入有效数据个数n:"))for i inrange(0, n):print(f"请输入第{i +1}数据给列表a:", end=' ')
num =int(input())
a[i]= num
print("插入前列表为:")print(a[:n])
pos =int(input("请输入要插入的位置:"))
key =int(input("请输入要插入的数据:"))
listlen = insert(a, pos, key, n)print("插入后列表为")print(a[:listlen])
线性表的删除
#a: 列表,pos: 要删除的位置,n: 列表中已有数据长度defdellist(a, pos, n):
i = pos
while i < n -1:
a[i]= a[i +1]
i +=1return n -1if __name__ =='__main__':
a =[None]*10
n =int(input("请输入有效数据个数n:"))for i inrange(0, n):print(f"请输入第{i +1}数据给列表a:", end=' ')
num =int(input())
a[i]= num
print("插入前列表为:")print(a[:n])
pos =int(input("请输入要删除的位置:"))
listlen = dellist(a, pos, n)print("删除后列表为")print(a[:listlen])
单链表的建立
#建立数据节点类classNode(object):def__init__(self, data):
self.data = self.data
self.next=None#创建单链表类classSLinkList:def__init__(self):
self.head =None
self.length =0#判断是否为空defis_empty(self):if self.head ==None:returnTruereturnFalse
在链表头部插入数据
defadd(self, p):if self.is_empty():
self.head = p
p.next= self.head
self.head = p
self.length +=1#在链表尾部插入数据defappendnode(self, p):
q = self.head
if self.is_empty():
self.add(p)else:while(q.next!=None):
q = q.next
q.next= p
self.length +=1#输出链表当前链接节点数据的状态deftravel(self):
q = self.head
if self.length ==0:print("目前链表没有数据!")else:print("目前链表里面的元素有:", end=' ')for i inrange(self.length):print("%s->"% q.data, end=' ')
q = q.nextprint("\n")defmain():
s = SLinkList()print("""
0、结束所有操作
1、从尾部插入数据建立单链表
2、从头部插入数据建立单链表
""")whileTrue:
number =eval(input("请输入0、1、2进行下一步操作:"))if number ==1:print("目前链表状态")
s.travel()print("正在尾部插入数据:")
p = Node(eval(input("请输入要插入的数据")))
s.appendnode(p)print("操作后的链表状态")
s.travel()elif number ==2:print("目前链表状态")
s.travel()print("正在头部插入数据:")
q = Node(eval(input("请输入要插入的数据")))
s.add(q)print("操作后的链表状态")
s.travel()elif number ==0:breakif __name__ =="__main__":
main()
栈的顺序存储
classStack(object):def__init__(self, size):
size.MAX = size
size.s =[]
self.top =0defstackEmpty(self):if self.top ==0:returnTruereturnFalsedefpop(self):if self.stackEmpty():print("栈已为空,不能执行出栈操作")else:
self.top = self.top -1return self.s.pop()if __name__ =="__main__":
s = Stack(50)
s.s =[1,2,3,4,5]
s.top =5whileTrue:print("请选择操作方式")print("1、出栈0、退出")
number =int(input())if number ==1:print(s.pop())else:break
队列的顺序存储
classQuene(object):def__init__(self, size):
self.MAX = self
self.q =[]
self.front =-1
self.rear =-1defisEmpty(self):if self.rear == self.front:returnTruereturnFalsedefdelquene(self):if self.isEmpty():print("队列已经空,不能执行出队操作")
x =-9999else:
self.front = self.front +1
x = self.q[self.front]return x
if __name__ =="__main__":
q = Quene(50)
q.q =[1,2,3,4,5]
q.rear =4
q.front =-1whileTrue:print("请选择操作方式")print("1、出队0、退出")
number =int(input())if number ==1:
x = q.delquene()if x !=-9999:print(f"出队元素放入{x}")print("出队后队列元素为")for i inrange(q.front +1,len(q.q)):print(q.q[i], end=' ')else:break
串的顺序存储
classsqstring(object):def__init__(self,obj=None):if objis None:# 构造空串
self.strvalue=[]# 字符数组存放串值
self.curLen =0# 当就串的长度elifisinstance(obj,str):# 以字符串构造串
self.curLen =len(obj)
self.strValue=[None]* self.curLen
for i inrange(self.curlen):
self.strvaluelil = obj[i]elifisinstance(obj,list):# 以字符列表梅造串
self.curLen =len(obj)
self.strValue =[None]* self.curLen
for i inrange(self.curlen):
self.strValue[i]= obj[i]deflength(self):'''返回串的长度'''return self.curLen
defdisplay(self):'''打印字符串'''for i inrange(self.curten):print(self.strValue[il, end='')if __name__ ='__main__':
string=input(”请输入字符串给变量string:")
s=sqstring(string)whileTrue;print("----请选择操作方式---")print("----1.打印字符串的长度并输出字符串\n----0.退出")
number=int(input())if number==1:print(s.length())
s.display()if number==0:break
树的存储
classNode:def__init__(self, data, parent):
self.data = data
self.parent = parent
classTree:def__init__(self):
self._array =[]defaddNode(self, data, parent):
node = Node(data, parent)
self._array.append(node)defshow(self):for i, v inenumerate(self._array):print('节点下标为 = {} 值为 = {} 父节点下标为{}'.format(i,v.data,v.parent))deffindParent(self, node):return self._array[node.parent]if __name__ =="__main__":print("------1.建立双亲表示树------\n----2.显示建立结结果-----\n")print("------3.输入节点求双亲节点-----\n-----4.退出-----\n")
tree = Tree()whileTrue:
number =int(input("请输入选择(1-4)"))if number ==1:print("请输入节点data以及双亲parent所在的下标")
data =input()
parent =int(input())if data !="#":
tree.addNode(data.strip(), parent)else:print("数据输入结束,请选择其他选项")elif number ==2:
tree.show()elif number ==3:print("请输入某一节点的数据值data,及双亲节点的下标parent求双亲节点")
data =input();
parent =int(input())
node = Node(data, parent)
node_parent = tree.findParent(node)print('父节点为={}'.format(node_parent.data))elif number ==4:breakelse:print("输入错误请重新输入数字(1-4)\n")