C++抽象数据类型介绍

📅 2026/7/6 12:03:12
C++抽象数据类型介绍
我们在学数据结构的时候经常遇到的一个概念就是抽象数据类型(Abstract Data Type)简称ADT。维基百科中的定义是抽象数据类型是计算机科学中具有类似行为的特定类别的数据结构的数学模型或者具有类似语义的一种或多种程序设计语言的数据类型。从这段定义来看非常地费解其实我们只需要抓住核心。核心就是接口和实现的分离。我们在使用一个ADT的时候只需要和接口进行交互而不必关心接口中的实现细节。同样数据也是隐藏不可见的也需要通过接口进行交互。也就是说接口是数据类型唯一的交互方式除此之外用户无法接触到ADT的数据以及实现细节。举个例子以栈举例如果我们不将栈设计成ADT那么用户在使用栈的时候可能就需要自己创建一个数组来存储栈中的数据通过调用一些方法来实现栈的功能。但这势必需要用户了解栈的原理以及数据存储的细节。ADT会做一个良好的封装用户只需要了解每个接口的功能调用对应的接口实现自己想要的逻辑即可。我们来看一下C Primer当中实现的栈的例子。首先我们需要知道栈一共有哪些接口大概有如下这么几个创建空栈可添加数据到栈顶可从栈顶弹出数据可查看栈是否为空可查看栈是否已满然后我们遵守C中面向对象的设计思路将它封装在一个类当中。首先我们来定义这个类123456789101112131415161718#ifndef STACK__H_#define STACK__H_typedefunsignedlongItem;classStack {private:enum{MAX10};Item items[MAX];inttop;public:Stack();boolisempty()const;boolisfull()const;boolpush(constItem item);boolpop(Item item);};#endif我们来看下这个定义会发现其中的数据都被设定成了private也就是用户无法直接访问到数据。只能通过public的接口进行交互也无须关心其中的实现细节可以当做黑盒使用。最后 我们再来看下C Primer当中给出的实现1234567891011121314151617181920212223242526272829#include stack.hStack::Stack() {top 0;}boolStack::isempty()const{returntop 0;}boolStack::isfull()const{returntop MAX;}boolStack::push(constItem item) {if(top MAX) {items[top] item;returntrue;}returnfalse;}boolStack::pop(Item item) {if(top 0) {item items[--top];returntrue;}returnfalse;}到此这篇关于C抽象数据类型介绍的文章就介绍到这了,