IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 4.python数据结构-无序表 -> 正文阅读

[数据结构与算法]4.python数据结构-无序表

1.什么是无序表?

  • 一种数据项按照相对位置存放的数据集,特别的,被称为“无序集unordered list”,其中数据项只按照存放位置来索引,如第一个、第二个等等。

2.无序表的定义

  • List():创建一个空列表
  • add(item):添加一个数据项到列表中,假设item原来不存在于列表中
  • remove(item):从列表中移除item,列表被修改,item原先存在应存在表中
  • search:在列表中查找item,返回布尔类型值
  • is_Empty:返回列表是否为空
  • size:返回列表包含了多少数据项
  • append(item):添加一个数据项到表末尾,假设item原先不存在列表中
  • index(item):返回数据项在表中的位置
  • insert(pos,item):将数据项插入到位置pos,假设item原先不存在与列表中,同时原列表具有足够多个数据项,能让item占据位置pos
  • pos():从列表末尾移除数据项,假设原列表至少有1个数据项
  • pop(pos):移除位置为pos的数据项,假设原列表存在位置pos

3.Python用链表实现无序表

# 链表实现:节点Node
class Node:
	def __init__(self,initdata):
		self.data = initdata
		self.next = None
	
	def getData(self):
		return self.data
	
	def getNext(self):
		return self.next
	
	def setData(self,newdata):
		self.data = newdata
	
	def setNext(self,newnext):
		self.next = newnext
# 链表实现: 无序表UnorderndList
class UnorderndList:
	def __init__(self):
		self.head = None
	
	def is_Empty(self):
	"""判断链表是否为空"""
		return self.head == None
	
	def add(self,item):
	"""添加数据"""
		temp = Node(item)
		temp.setNext(self.head)
		self.head = temp
	
	def size(self):
	"""返回数据项的个数"""
		current = self.head
		count = 0
		while != None:
			count = count + 1
			current = current.getNext()
		return count
	
	def search(self,item):
	"""搜索数据项"""
		current = self.head
		found = False
		while current != None and not found:
			if current.getData() == item:
				found = True
			else:
				current = current.getNext()
		return found
	
	def remove(self,item):
	"""删除数据项"""
		current = self.head
		previous = None
		found = False
		while not found:
			if current.getData() == item:
				found = True
			else:
				previous = current
				current = current.getNext()
		
		if previous == None:
			self.head = current.getNext()
		else:
			previous.setNext(current.getNext())
	
	def append(self,item):
	"""在链表尾部插入item"""
		node = Node(item)
		current = self.head
		if current is None:
			self.head = node
		while current.getNext() is not None:
			current = current.getNext()
		current.setNext(node)
	
	 
    def index(self, item):
    """查询元素item"""
        current = self.head
        count = 0
        while current != None:
            if current.getData() == item:
                return count
            current = current.getNext()
            count += 1
        return -1

    def pop(self, index=None):
    """删除尾部元素"""
        previous = None
        current = self.head
        if index == None: #默认删除尾部的元素并返回
            index = self.size() - 1
        if index < 0 or index >= (self.size()): #index不能小于0 或者 超出链表的大小
            raise IndexError
        while self.index(current.getData()) != index: #判断当前节点对应的索引是否等于index
            previous = current
            current = current.getNext()
        data = current.getData()
        #和remove方法类似
        if previous == None: 	
            self.head = current.getNext()
        else:
            previous.setNext(current.getNext())
        return data

    
    def insert(self, index, item):
    """在item插入元素"""
        node = Node(item)
        if index == 0:
            node.setNext(self.head)
            self.head = node
        else:
            if index < 0 or (index >= self.size()):
                raise IndexError
            current = self.head
            previous = None
            while self.index(current.getData()) != index:
                previous = current
                current = current.getNext()
                if current is None:
                    break
            previous.setNext(node)
            node.setNext(current)

    def reverseList(self):
    """链表反向排序"""
        previous = None
        temp = None
        current = self.head
        while current != None:
            temp = current.getNext()
            current.setNext(previous)
            previous = current #将current 和previou 节点向链表的前方移动
            current = temp
            if previous != self.head:
                self.add(previous.getData())
        return self
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:07:37  更:2022-08-06 11:11:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:33:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码