以下是python语言实现对应的一些基础的数据结构,面试时虽然不会直接考,但是很多数据结构由于平时不用,比如红黑树等,很多人甚至从来也没写过这些基础数据结构在对应语言中怎么写
队列:队列的特性就是先进先出,在python中可以用数组来作为队列使用。
初始化队列:
queue = list()
进队列:
queue.append(i)
出队列:
queue.pop(0)
进队列时不用判断,出队列时得先判断队列是否不为空,否则会报错。
栈:栈的特性是先入后出,在python中可以使用数组来作为栈使用
初始化栈:
stack = list()
入栈:
stack.append(i)
出栈:
stack.pop()
python中的list对应的pop方法,默认是pop最后一个值,参数用于指定list中的位置
链表:python对应的基础数据结构中没有链表的,所以需要面向对象来进行解决
初始化一个单向链表的结点
class ListNode(object):
def __init__(self, x=None, next=None):
self.val = x
self.next = next
双向链表就是再加一个next,比如这样
class ListNode(object):
def __init__(self, x=None, left=None, right=None):
self.left = left
self.val = x
self.right = right
使用方法,举例:将一个list转换成一个单向链表并输出
# -*- coding:utf-8 -*-
class linkNode(object):
def __init__(self, x=None, next=None):
self.val = x
self.next = next
def func(nums):
pHead = linkNode()
pTemp = pHead
for i in nums:
node = linkNode(i)
pTemp.next = node
pTemp = pTemp.next
pTemp = pHead
while(pTemp):
print(pTemp.val)
pTemp = pTemp.next
func([1,2,3,4,5,6])
二叉树:
二叉树的数据结构长的样子大家都明白,面试的话基础就是先中后序的遍历方法,二叉树为什么大家都喜欢考,原因可能是代码短小适合在面试短时间内考察,而且考这一个就顺手考察了链表,或者为了考而考,算法题中很多,但是实际上项目代码中使用的并不太多(红黑树那个梗)。
首先是二叉树的结点,就是上面双向链表的节点:
class ListNode(object):
def __init__(self, x=None, left=None, right=None):
self.left = left
self.val = x
self.right = right
二叉树的特点就是
1.除了根节点,所有的节点都有父节点;
2.除了叶子节点,所有的节点都有子节点;
3.二叉树中,第 i 层最多有 2的i次方-1 个结点;
4.如果二叉树的深度为 K,那么此二叉树最多有 2的K次方-1 个结点;
5.
6.
简单了解下就好,下面重点就是这先中后序遍历的递归和非递归写法



