数据结构概念、栈、队列、链表与数组、字典与对象实现原理(详细的代码)

目录:数据结构中的一些概念 栈(stack)队列链表python中字典对象实现原理数组一. 数据结构中的一些概念1、数据结构是什么简单来说,数据结果就是设计数据以何种方式存储在计算机中比如:列表,集合,与字典等都是一种数据结构程序 = 数据结构 + 算法2、数据结构与数据类型1)数据类型:说明:数据类型是一个值的集合和定义在此集合上一组操作(通常是增删改查...
摘要由CSDN通过智能技术生成

目录:

一. 数据结构中的一些概念

1、数据结构是什么

  • 简单来说,数据结果就是设计数据以何种方式存储在计算机中
  • 比如:列表,集合,与字典等都是一种数据结构
  • 程序 = 数据结构 + 算法

2、数据结构与数据类型

1)数据类型:

  • 说明:数据类型是一个值的集合和定义在此集合上一组操作(通常是增删改查或者操作读写的方法)的总称
  • 数据类型:int、str、boolean、byte

2)数据结构:

  • 说明:数据以什么方式构成,如何进行存储(数据结构是数据类型中的一种:结构类型)
  • 数据结构:数组、栈、队列、链表、树、图、堆、散列表等
  • python数据结构:列表、集合、字典、元祖

3、数据结构与数据类型比较

  • 数据类型的分类为:原子类型 和 结构类型;
  • 原子类型 = 一种值的集合 + 定义在值集合上的一组操作。(比如:python中的int,float,字符串)
  • 结构类型 = 一种数据结构 + 定义在这种数据结构上的一组操作。(比如:python中的列表,字典,元组)
    原子类型 + 结构类型 = 数据类型
  • 注:数据类型是一个值的集合和定义在此集合上一组操作(通常是增删改查或者操作读写的方法)的总称

在这里插入图片描述

二. 栈(stack)

1、栈的定义

  • 栈是一种数据集合,可以理解为只能在一端进行插入或删除操作的列表

2、栈的特点

  • 后进先出(last-in, first-out)

3、栈的概念

  • 栈顶,栈底

4、栈的基本操作

  • 进栈(压栈):push
  • 出栈:pop
  • 取栈顶:gettop

python实现栈功能:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
class Stack(object):

    def __init__(self):
        self.stack = []              # 初始化一个栈

    def push(self,item):             # 入栈
        self.stack.append(item)

    def gettop(self):                # 获取栈顶元素
        return self.stack[-1]

    def pop(self):                   # 出栈
        return self.stack.pop()


if __name__ == '__main__':
    s = Stack()
    s.push(1)
    s.push(2)
    print(s.stack)

5、栈的使用:匹配括号是否成对出现

匹配括号是否成对出现:

def check_kuohao(s):
   stack = []
   for char in s:
      if char in ['(','[','{']:
         stack.append(char)
      elif char == ')':
         if len(stack)>0 and stack[-1] == '(':
            stack.pop()
         else:
            return False
      elif char == ']':
         if len(stack) > 0 and stack[-1] == '[':
            stack.pop()
         else:
            return False
      elif char == '}':
         if len(stack) > 0 and stack[-1] == '{':
            stack.pop()
         else:
            return False
   if len(stack) == 0:
      return True
   else:
      return False
print(check_kuohao('(){}{}[]'))  #True

三. 队列

1、队列定义

  • 队列是一个数据集合,仅允许在列表的一端进行插入,另一端进行删除
  • 插入的一端称为队尾(rear),插入动作叫进队或入队
  • 进行删除的一端称为对头(front),删除动作称为出队
  • 队列性质:先进先出(First-in, First-out)
  • 双向队列:队列的两端都允许进行进队和出队操作

2、对列使用方法

  • 导入: from collectios import deque
  • 创建队列:queue = deque(li)
  • 进队: append
  • 出队: popleft
  • 双向队列队首进队:appendleft
  • 双向队列队尾出队:pop

python操作队列queue:

from queue import Queue
#1. 基本FIFO队列  先进先出 FIFO即First in First Out,先进先出
#2. maxsize设置队列中,数据上限,小于或等于0则不限制,容器中大于这个数则阻塞,直到队列中的数据被消掉
q = Queue(maxsize=0)

#3. 写入队列数据
q.put(0)
q.put(1)
q.put(2)

#4. 输出当前队列所有数据
print(q.queue)

#5. 删除队列数据,并返回该数据
q.get()

#6. 输也所有队列数据
print(q.queue)

3、双向对列原理图

  • 环形对列:当对位指针front == Maxsize + 1 时,再进一个位置就自动到0
  • 实现方法:求余数运算
  • 队首指针前进1: front = (front + 1)%M
  • axSize队尾指针前进1:rear = (rear+1)%MaxSize
  • 队空条件:rear == front
  • 队满条件:(rear+1)%MaxSize == front
    在这里插入图片描述

4、队列应用场景

  • 队列主要的功能是在多个进程间共享数据,实现业务解耦,提高效率
  • 生产者线程只需要把任务放入队列中,消费者线程只需要到队列中取数据进行处理

5、队列与列表区别

  • 列表中数据虽然是排列的,但数据被取走后还会保留,而队列中这个容器的数据被取后将不会保留

四. 链表

1、单链表

注:链表中每个元素都是一个对象,每个对象称为一个节点,包含有数据域key和指向下一节点的指针next,通过各个节点间的相互连接,最终串联成一个链表
在这里插入图片描述

单链表增删改查:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
class Node(object):
    def __init__(<
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值