大话数据结构 - 顺序表

线性表就是0个或多个数据元素的有限序列; 元素之间存在顺序, 除开头结尾之外, 每个元素有且仅有一个前驱元素, 后继元素。线性表的顺序存储叫做顺序表,简单的说就是对数组进行封装,使得更好的满足需求。


1. 线性表的顺序存储结构
线性表的顺序存储结构指的是用一段地址连续的内存依次存储线性表的数据元素
    
2. 线性表的链式存储结构
链表


3. 顺序表Python实现

class List:
    """
    线性表的顺序存储结构: 顺序表
    
    数据成员:
        一个数组, 线性表的长度
        
    方法成员:
        1. 判断线性表是否为空
        2. 向线性表任意位置插入元素
        3. 查找线性表中是否存在某个值
        4. 删除任意位置的一个元素
        5. 获取列表中任意位置的元素
        6. 清空列表
    
    """
    def __init__(self, data):
        self.List = data
        self.length = self._get_list_length()
        
    def _get_list_length(self): return len(self.List)
    
    def is_empty(self):
        # 1. 判断线性表是否为空
        if len(self.List) == 0: return True
        else:   return False
    
    def insert(self, i, element):
        # 2. 向线性表第i个位置插入元素
        length = self.length
        if i not in range(length): raise(Exception("线性表长度不足"))
        for j in range(i, length):
            temp = self.List[j]
            self.List[j] = element
            element = temp
    
    def locate_ele(self, element):
        # 3. 对给定的某个值element定位, 如果存在返回-1
        length = self.length 
        for i in range(length):
            if self.List[i] == element:
                return i
        print("\n线性表中不存在{0}".format(element))
        return -1
            
    def delete_i_ele(self, i):
        # 4. 删除第i个位置的元素
        length = self.length
        if i not in range(length): raise(Exception("线性表长度不足"))
        temp = []
        for j in range(i, length-1):
            temp.append(self.List[j + 1])
        self.List = self.List[0:j-1] + temp
    
    def get_i_ele(self, i):
        # 5. 获取第i个位置的元素
        length = self.length
        if i not in range(length): raise(Exception("线性表长度不足"))
        return self.List[i]
    
    def clean(self): self.List = []


哈希表是一种高效的数据结构,它能够在平均情况下以常数时间O(1)进行插入、删除和查找操作。在C语言中,我们可以使用哈希表来解决一些常见的问题,比如查找一个元素或者统计元素出现的频率。 在实现哈希表时,我们需要以下几个关键组成部分: 1. 哈希函数:哈希函数将输入的数据映射到哈希表中的某个位置,它应该具备良好的分布性,即使数据分布不均匀,也能使得元素尽可能均匀地散列到不同的槽位中。 2. 数组:哈希表通常使用一个数组来存储数据,数组的大小可以根据实际情况进行调整。每个槽位可以存储一个元素或者一个指向链表/红黑树等数据结构的指针,用于解决哈希冲突。 3. 冲突处理:由于不同的元素可能被映射到相同的槽位上,所以我们需要解决冲突的问题。常见的解决方法有开放地址法和链地址法。开放地址法会寻找下一个可用的槽位,直到找到一个空闲位置,而链地址法则使用链表或其他数据结构将冲突的元素串联起来。 使用C语言实现哈希表时,我们可以先定义一个结构体来表示哈希表的每个槽位,然后使用数组来存储这些结构体。结构体可以包含键值对等信息,以及指向下一个元素的指针(用于链地址法)。然后,我们可以根据需要实现插入、删除和查找等操作,使用哈希函数将元素映射到相应的位置,并根据具体的冲突处理方式解决冲突。 总之,哈希表是一种非常实用的数据结构,它在处理大量数据时能够提供高效的查找和操作效率。在C语言中,我们可以根据具体需求实现自己的哈希表,或者使用已有的开源库来简化开发过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值