#数据类型

本文介绍了数据类型的概念,区分了原子类型和结构类型,并详细阐述了抽象数据类型(ADT),强调了其在程序设计中的问题分解、抽象和信息隐藏特性。以栈为例,详细描述了栈的数据对象、数据关系和基本操作,包括push、pop、peek、isEmpty和size等。
摘要由CSDN通过智能技术生成

数据类型

数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。

数据类型的定义

数据类型可以分两类:原子类型和结构类型。

 原子类型:是不可以再分解的基本类型,包括整型、实型、字符型等

  结构类型:由若干个类型组合而成,是可以再分解。例如整型数组是由若干整型数据组成的。

eg

  原子类型相当于化学中的原子,结构类型则是化学中可分解的化合物。

抽象数据类型

抽象是指取出事物具有的普遍性的本质。

抽象的三无关:1.与存放数据的机器无关。

                          2.与数据存储的物理结构无关。

                          3.与实现操作的算法和编程语言无关。

抽象数据类型(Abstract Data Type,ADT)

定义:一个数学模型及定义在该模型上的一组操作。(抽象数据类型的定义仅取决于它的一组逻辑特性,与计算机内部如何表示和实现无关。)

抽象数据类型体现了程序设计中的问题分解、抽象、和信息隐藏的特性。

抽象数据类型的主要特征包括数据抽象和数据封装。数据抽象是指用ADT描述程序处理的实体时,强调的是其本质的特征,无论内部结构如何变化,只要本质特性不变,就不影响其外部使用

抽象数据类型(Abstract Data Type,ADT)的格式通常包括以下部分:

数据对象:定义数据对象的集合。数据对象是抽象数据类型的实例或值。

数据关系:描述数据对象之间的关系。这些关系可以是结构性的(如树或图的关系),也可以是逻辑性的(如相等或排序关系)。

基本操作:定义在数据对象上的一组操作。这些操作描述了可以对数据对象执行的行为或计算。它们通常包括创建(构造函数)、销毁(析构函数)、访问(如读取数据)、修改(如更新数据)和查询(如查找或比较)等操作

eg 栈(Stack)

        数据对象:一个具有特定访问原则(LIFO,后进先出)的项序列。

        数据关系:项之间的关系是通过它们在栈中的位置来定义的,即后入栈的项位于先入栈的项之上。

        基本操作

                push(item):将一个新项添加到栈顶。

                pop():从栈顶移除并返回一个项。如果栈为空,则可能引发异常或错误。

                peek():返回栈顶项的值,但不移除它。如果栈为空,则可能返回特殊值或引发异常。

                isEmpty():检查栈是否为空。

                size():返回栈中项的数量。

栈的一个例举代码(Python中注释用井号:#

使用三引号  """   """字符串作为多行注释

class Stack:

    def __init__(self):

        self.items = []

    def push(self, item):

        """将一个新项添加到栈顶"""

        self.items.append(item)

    def pop(self):

        """从栈顶移除并返回一个项。如果栈为空,则引发异常"""

        if not self.is_empty():

            return self.items.pop()

        else:

            raise IndexError("pop from an empty stack")

    def peek(self):

        """返回栈顶项的值,但不移除它。如果栈为空,则返回None或引发异常"""

        if not self.is_empty():

            return self.items[-1]

        else:

            return None  # 或者可以抛出异常  

    def is_empty(self):

        """检查栈是否为空"""

        return len(self.items) == 0

    def size(self):

        """返回栈中项的数量"""

        return len(self.items)

    # 使用栈的示例  

s = Stack()

s.push("apple")

s.push("banana")

s.push("cherry")

print(s.peek())  # 输出: cherry  

print(s.size())  # 输出: 3  

print(s.pop())  # 输出: cherry  

print(s.pop())  # 输出: banana  

print(s.is_empty())  # 输出: False  

print(s.pop())  # 输出: apple  

print(s.is_empty())  # 输出: True  

# 尝试从空栈中弹出元素将引发异常  

# s.pop()  # 抛出 IndexError: pop from an empty stack

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值