数据结构——链表,哈希表

文章目录

链表

python实现

python 复制代码
class Node:
    def __init__(self, item):
        self.item = item
        self.next = None


def head_create_linklist(li):
    head = Node(li[0])
    for element in li[1:]:
        node = Node(element)
        node.next = head
        head = node
    return head


def tail_create_linklist(li):
    head = Node(li[0])
    tail = head
    for element in li[1:]:
        node = Node(element)
        tail.next = node
        tail = node
    return head


def print_linklist(lk):
    while lk:
        print(lk.item, end=',')
        lk = lk.next
    print()


a = head_create_linklist([1, 2, 3, 4, 5, 6, 7, 8])
b = tail_create_linklist([1, 2, 3, 4, 5, 6, 7, 8])
print_linklist(a)
print_linklist(b)

双向链表

复杂度分析

哈希表(散列表)

python实现哈希表

python 复制代码
class LinkList:
    class Node:
        def __init__(self, item=None):
            self.item = item
            self.next = None

    class LinkListIterator:
        def __init__(self, node):
            self.node = node

        def __next__(self):
            if self.node:
                cur_node = self.node
                self.node = cur_node.next
                return cur_node.item
            else:
                raise StopIteration

        def __iter__(self):
            return self

    def __init__(self, iterable=None):
        self.head = None
        self.tail = None
        if iterable:
            self.extend(iterable)

    def append(self, obj):
        s = LinkList.Node(obj)
        if not self.head:
            self.head = s
            self.tail = s
        else:
            self.tail.next = s
            self.tail = s

    def extend(self, iterable):
        for obj in iterable:
            self.append(obj)

    def find(self, obj):
        for n in self:
            if n == obj:
                return True
        else:
            return False

    def __iter__(self):
        return self.LinkListIterator(self.head)

    def __repr__(self):
        return "<<" + ", ".join(map(str, self)) + ">>"


# 类似于集合的结构
class HashTable:
    def __init__(self, size=101):
        self.size = size
        self.T = [LinkList() for i in range(self.size)]

    def h(self, k):
        return k % self.size

    def insert(self, k):
        i = self.h(k)
        if self.find(k):
            print("Duplicated Insert.")
        else:
            self.T[i].append(k)

    def find(self, k):
        i = self.h(k)
        return self.T[i].find(k)


ht = HashTable()

ht.insert(0)
ht.insert(1)
ht.insert(3)
ht.insert(102)
ht.insert(508)
ht.insert(19)
ht.insert(56)
ht.insert(96)

print(",".join(map(str, ht.T)))
print(ht.find(203))

哈希表的应用

若有错误与不足请指出,关注DPT一起进步吧!!!

相关推荐
IT规划师2 小时前
数据结构 - 散列表,三探之代码实现
数据结构·散列表·哈希表
武子康3 小时前
大数据-187 Elasticsearch - ELK 家族 Logstash Filter 插件 使用详解
大数据·数据结构·elk·elasticsearch·搜索引擎·全文检索·1024程序员节
韭菜盖饭5 小时前
LeetCode每日一题3211---生成不含相邻零的二进制字符串
数据结构·算法·leetcode
czme5 小时前
线程和进程
linux·数据结构·计算机网络
旋转的油纸伞6 小时前
大模型,多模态大模型面试【LoRA,分类,动静态数据类型,DDPM,ControlNet,IP-Adapter, Stable Diffusion】
算法·leetcode·面试·职场和发展·散列表
J_admin7 小时前
数据结构 之 二叉树的遍历------先根遍历(五)
数据结构
Wils0nEdwards9 小时前
Leetcode 合并 K 个升序链表
算法·leetcode·链表
黑不拉几的小白兔12 小时前
PTA L1系列题解(C语言)(L1_097 -- L1_104)
数据结构·算法·1024程序员节
秋说12 小时前
【数据结构 | PTA】懂蛇语
数据结构·c++
ChaoZiLL13 小时前
关于我的数据结构与算法——初阶第二篇(排序)
数据结构·算法