赞
踩
线性表:n 个数据元素的有限序列。是一种常见的线性结构。
线性结构特点:
线性表的顺序存储结构
特点:
只要确定好了存储线性表的起始位置,线性表中任一数据元素都可以随机存取,所以线性表的顺序存储结构是一种随机存取的储存结构。通常用数组表示顺序表。
Python实现基本操作:
List = [0,1,2,3,4,5] # 按址查找(地址) List.index(2) print(List.index(2)) # 插入(地址, 值) List.insert(2, 3) print(List) # 删除(地址) List.pop(2) print(List) # 判空 ListEmpty = True if not List else False print(ListEmpty) # 求长 len(List) print(len(List))
输出:
2
[0, 1, 3, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
False
6
插入与删除:
线性表的链式存储结构之一
特点:
下面是单链表的简单结构:
链表中的数据是以结点来表示的,每个结点包含两个域,一个数据域(元素域)和一个指针域。这个指针指向链表中的下一个结点,而最后一个结点的指针域则指向一个空值。每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
基本构成:
Python实现单链表操作(参考:python实现单链表的基本操作)
class Node(object): def __init__(self, item): # 元素 self.element = item # 指针 self.next = None # 创建单链表类 class SingleLinkList(object): def __init__(self): self.header = None self.length = 0 # 1、判断是否为空 def is_empty(self): if self.header == None: return True else: return False # 2、头部插入 def add(self, node): # 如果为空 if self.is_empty(): self.header = node else: node.next = self.header self.header = node # currentNode = self.header self.length += 1 # 3、尾部插入 def append(self, node): current_Node = self.header if self.is_empty(): self.add(node) else: # 找到最后一个结点 while (current_Node.next != None): current_Node = current_Node.next current_Node.next = node self.length += 1 # 4、指定位置插入 def insert(self, node, index): current_Node = self.header if index > self.length + 1 or index <= 0: while (index > self.length + 1 or index <= 0): print("你要插入的位置不对,请重选位置:") index = eval(input()) if index == 1: self.add(node) elif index == 2: node.next = self.header.next self.header.next = node self.length += 1 else: for i in range(1, index - 1): current_Node = current_Node.next node.next = current_Node.next current_Node.next = node self.length += 1 # 5、遍历 def travel(self): current_Node = self.header if self.length == 0: print("目前链表没有数据!") else: print("目前链表里面的元素有:", end=" ") for i in range(self.length): print("%s " % current_Node.element, end=" ") current_Node = current_Node.next print("\n") # 6、排序不用交换节点的位置,只需要交换节点上的数据值 def list_sort(self): for i in range(0, self.length - 1): current_Node = self.header for j in range(0, self.length - i - 1): if current_Node.element > current_Node.next.element: temp = current_Node.element current_Node.element = current_Node.next.element current_Node.next.element = temp current_Node = current_Node.next # 7、按索引删除 def delete(self, index): if index <= 0 or index > self.length: while (index <= 0 or index > self.length): print("你输入的下标不对,请重新输入需要删除的值的下标:") index = eval(input()) # return else: if index == 1: self.header = self.header.next currentNode = self.header elif index == 2: current_Node = self.header current_Node.next = current_Node.next.next else: current_Node = self.header for i in range(1, index - 1): current_Node = current_Node.next current_Node.next = current_Node.next.next self.length -= 1 # 8、查找是否包含,并返回下标 def isContain(self, num): contain = 0 current_Node = self.header for i in range(self.length): if current_Node.element == num: print("%d在链表中%d处\n" % (num, i + 1)) # i+1是在正常人认为的位置处,程序员一般是从0开始算起 contain = 1 current_Node = current_Node.next if contain == 0: print("%d不在链表中\n" % num) # 9、根据下标找节点 def searchNodeByIndex(self, index): current_Node = self.header if index <= 0 or index > self.length: while (index <= 0 or index > self.length): print("你输入的下标不对,请重新输入:") index = eval(input()) # return 0 if index > 0 or index <= self.length: for i in range(index - 1): current_Node = current_Node.next return current_Node # 10、根据下标修改节点的值 def Alert(self, index, num): # index定义为下标 current_Node = self.header if index <= 0 or index > self.length: print("你输入的下标不对,请重新输入!\n") else: for i in range(index - 1): current_Node = current_Node.next current_Node.element = num
特点:
特点:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。