常见数据结构的Python实现(建议收藏)

  

数据结构作为计算机基础的必修内容,也是很多大型互联网企业面试的必考题。可想而知,它在计算机领域的重要性。

  

然而很多计算机专业的同学,都仅仅是了解数据结构的相关理论,却无法用代码实现各种数据结构。

  

<强>栈

  
 <代码类="语言python ">堆栈类(对象):
  def __init__(自我,限制=10):
  自我。堆栈=[]#存放元素
  自我。限制=限制#栈容量极限
  def推(自我,数据):#判断栈是否溢出
  如果len (self.stack)祝辞=self.limit:
  打印(“StackOverflowError”)
  通过
  self.stack.append(数据)
  def流行(自我):
  如果self.stack:
  返回self.stack.pop ()
  其他:
  提高IndexError(流行从一个空栈)#空栈不能被弹出
  def peek(自我):#查看堆栈的最上面的元素
  如果self.stack:
  返回self.stack [1]
  def is_empty(自我):#判断栈是否为空
  返回不bool (self.stack)
  def大小(自我):#返回栈的大小
  代码返回len (self.stack)  
  

<强>单链表

  
 <代码类=坝镅詐ython”>“
  遇到问题没人解答?小编创建了一个Python学习交流QQ群:×××
  寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
  “‘
  类节点:
  def __init__(自我、数据):
  自我。data=https://www.yisu.com/zixun/data
  自我。下一个=没有
  类Linked_List:
  def __init__(自我):
  自我。头=没有
  def initlist(自我,data_list): #链表初始化函数
  self.head=节点(data_list[0]) #创建头结点
  temp=self.head
  因为我在data_list[1]: #逐个为数据内的数据创建结点,建立链表
  节点=节点(我)
  temp.next=节点
  temp=temp.next
  def is_empty(自我):#判断链表是否为空
  如果self.head.next==没有:
  print (Linked_list是空的)
  还真
  其他:
  返回假
  def get_length(自我):#获取链表的长度
  temp=自我。头#临时变量指向队列头部
  长度=0 #计算链表的长度变量
  而临时!=没有:
  长度=+ 1
  temp=temp.next
  返回长度#返回链表的长度
  def插入(自我、关键值):#链表插入数据函数
  如果key<0或key> self.get_length () 1:
  打印(“插入错误”)
  temp=self.head
  我=0
  而i<=关键:#遍历找到索引值为关键的结点后,在其后面插入结点
  pre=temp
  temp=temp.next
  我+ 1=节点=节点(值)
  pre.next=节点
  node.next=temp
  def print_list(自我):#遍历链表,并将元素依次打印出来
  打印(“linked_list:“)
  temp=self.head
  new_list=[]
  虽然临时不是没有:
  new_list.append (temp.data)
  temp=temp.next
  打印(new_list)
  def删除(自我,键):#链表删除数据函数
  如果key<0或key> self.get_length () 1:
  打印(“插入错误”)
  我=0
  temp=self.head
  而临时!=没有:#遍历找到索引值为关键的结点
  pre=temp
  temp=temp.next
  我+ 1=如果我==关键:
  pre.next=temp.next
  temp=没有
  还真
  pre.next=没有
  def反向(自我):#将链表反转
  prev=没有
  当前=self.head
  虽然目前的:
  next_node=current.next
  电流。下一个=上一页
  prev=当前
  当前=next_node
  自我。头=上一页 
  

<强>双链表

  
 <代码类="语言python ">类节点(对象):
  #双向链表节点
  def __init__(自我,项):
  自我。项=项
  自我。下一个=没有
  自我。prev=没有
  类DLinkList(对象):
  #双向链表
  def __init__(自我):
  自我。_head=没有
  def is_empty(自我):
  #判断链表是否为空
  回归自我。_head==没有
  def get_length(自我):
  #返回链表的长度
  坏蛋=self._head
  数=0
  当坏蛋!=没有:
  数=数+ 1
  坏蛋=cur.next
  返回数
  def旅行(自我):
  #遍历链表
  坏蛋=self._head
  当坏蛋!=没有:
  打印(cur.item)
  坏蛋=cur.next
  打印(" ")
  def添加(自我,项):
  #头部插入元素
  节点=节点(项)
  如果self.is_empty ():
  #如果是空链表,将_head指向节点
  自我。_head=节点
  其他:
  #将节点的下一个指向_head的头节点
  节点。下一个=self._head
  #将_head的头节点页的上一页指向节点
  self._head。prev=节点
  #将_head指向节点
  自我。_head=节点
  def append(自我,项):
  #尾部插入元素
  节点=节点(项)
  如果self.is_empty ():
  #如果是空链表,将_head指向节点
  自我。_head=节点
  其他:
  #移动到链表尾部
  坏蛋=self._head
  虽然cur.next !=没有:
  坏蛋=cur.next
  #将尾节点坏蛋的未来指向节点
  cur.next=节点
  #将节点页的上一页指向坏蛋
  节点。prev=坏蛋
  def搜索(自我,项):
  #查找元素是否存在
  坏蛋=self._head
  当坏蛋!=没有:
  如果cur.item==项目:
  还真
  坏蛋=cur.next
  返回假
  def插入(自我、pos、项目):
  #在指定位置添加节点
  如果pos & lt;=0:
  self.add(项)
  elif pos祝辞(self.length () 1):
  self.append(项)
  其他:
  节点=节点(项)
  坏蛋=self._head
  数=0
  #移动到指定位置的前一个位置
  而数& lt;(pos-1):
  数+=1
  坏蛋=cur.next
  #将节点页的上一页指向坏蛋
  节点。prev=坏蛋
  #将节点的下一个指向坏蛋的下一个节点
  节点。下一个=cur.next
  #将坏蛋的下一个节点页的上一页指向节点
  cur.next。prev=节点
  #将坏蛋的未来指向节点
  cur.next=节点
  def删除(自我,项):
  #删除元素
  如果self.is_empty ():
  返回
  其他:
  坏蛋=self._head
  如果cur.item==项目:
  #如果首节点的元素即是要删除的元素
  如果cur.next==没有:
  #如果链表只有这一个节点
  自我。_head=没有
  其他:
  #将第二个节点页的上一页设置为零
  cur.next。prev=没有
  #将_head指向第二个节点
  自我。_head=cur.next
  返回
  当坏蛋!=没有:
  如果cur.item==项目:
  #将坏蛋的前一个节点的下一指向坏蛋的后一个节点
  cur.prev。下一个=cur.next
  #将坏蛋的后一个节点页的上一页指向坏蛋的前一个节点
  cur.next。prev=cur.prev
  打破
  坏蛋=cur.next 

常见数据结构的Python实现(建议收藏)