关于数据结构还是在学校的时候学的,那时候代码基本都在用C实现的。现在重新学习,代码主要用python ,部分会有 java实现的代码
链表是一种常见的数据结构,我们经常将链表和数组进行对比。
所以先说说数组:
数组:数组存储需要一块连续的内存空间来存储,所以当我需要10M的空间来存储数据,就算甚于空间为100M,但是没有连续的10M空间,空间也无法申请成功。
链表:链表存储数据无数组那样苛刻的条件,通过“指针”(或引用)将一组零散的内存块串联起来。
链表分为单链表,双链表和循环链表
单链表:单链表的头节点存放的是链表的第一个节点,即链表的基地址。最后一个节点称为尾节点,尾节点的指针指向的指为null。
单链表的python代码:
class Node(): def __init__(self, item=None, pos_item=None): self._item = item self._next = pos_item def __repr__(self): return str(self._item) # 单链表 class Chain(): def __init__(self): self._head = None self._length = 0 # 判断是否为空列表 def isEmpty(self): return self._length == 0 # 链表结尾插入 def append(self,item): if isinstance(item, Node): node = item else: node = Node(item) if self._head is None: self._head = node else: be_node = self._head while be_node._next: be_node = be_node._next be_node._next = node self._length += 1 # 插入节点 def insert(self, index, item): if self.isEmpty(): print('this chain table is empty') return if index <0 or index >= self._length: print("error info: out of index") return in_node = Node(item) node = self._head count = 1 while True: node = node._next count += 1 if count == index: next_node = node._next node._next = in_node in_node._next = next_node self._length += 1 return # 删除节点 def delete(self, index): if self.isEmpty(): print('this chain is empty') return if index < 0 or index >= self._length: print("error info: out of index") return # if index == 0 # self._head = None else: node = self._head count = 0 while True: count += 1 if index == count: node._next = node._next._next break node = node._next self._length -= 1 def __repr__(self): if self.isEmpty(): print("the chain is empty") return nlist = "" node = self._head while node: nlist += node._item + " " node = node._next return nlist if __name__ == '__main__': chain = Chain() chain.append('A') chain.append('B') chain.append('C') chain.append('D') chain.append('E') chain.append('F') chain.append('G') print(chain) chain.insert(2, 'H') print(chain) chain.delete(3) print(chain) print(chain._length)