最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

焦点热文:58.抽象数据类型

来源:博客园

Stock类非常具体。然而,程序员常常通过定义类表示更通用的概念。抽象数据类型以通用的方式描述数据类型,而没有引入语言或实现细节。例如,通过使用栈,可以以这样的方式存储数据,即总是从栈顶添加或删除数据。例如,C++程序使用栈来管理自动变量。当新的自动变量被生成后,它们被添加到栈顶;消亡时,从栈中删除它们。

首先,栈存储了多个数据项(该特征使得栈成为一个容器——一种更为通用的抽象):其次,栈由可对它执行的操作来描述。

●可创建空栈


(资料图)

●可将数据项添加到栈顶(压入)

●可从栈顶删除数据项(弹出)

●可查看栈是否填满

●可查看栈是否空

可以将上述描述转换为一个类声明,其中公有成员函数提供了表示栈操作的接口,而私有数据成员负责存储栈数据。类概念非常适合于ADT方法。

私有部分必须表明数据存储的方式。例如,常规数组、动态分配数组或更高级的数据结构(如链表)。然而,公有接口应隐藏数据表示,而以通用的术语来表达,如创建栈、压入等。

stack.h

#pragma once//stack.h -- 抽象数据类型的类定义#ifndef STACK_H_#define STACK_H_typedef unsigned long Item;class Stack{private:enum { MAX = 10 };Item items[MAX];int top;public:Stack();bool isempty() const;//判断栈是否bool isfull() const;//如果stack已经满了push()返回真否则返回假bool push(const Item& item);//入栈//如果stack已经空pop()返回真否则返回假bool pop(Item& item);//出栈};#endif

stack.cpp

//stack.cpp -- Stack成员函数#include "stack.h"#pragma once//stack.h -- 抽象数据类型的类定义Stack::Stack()//创建空栈{top = 0;}bool Stack::isempty() const//判断栈是否{return top == 0;}bool Stack::isfull() const{return top == MAX;}//如果stack已经满了push()返回真否则返回假bool Stack::push(const Item& item)//入栈{if (top < MAX){items[top++] = item;return true;}elsereturn false;}//如果stack已经空pop()返回真否则返回假bool Stack::pop(Item& item)//出栈{if (top > 0){item = items[--top];return true;}elsereturn false;}

stacker.cpp

#pragma warning(disable:4996)#define _CRT_SECURE_NO_WARNINGS 1//stacker.cpp -- 测试Stack类#include #include //或cctype.h#include "stack.h"using namespace std;int main(){Stack st;//创建一个空栈char ch;unsigned long po;cout << "请输入A入栈,\n"<< "输入P出栈,输入Q退出。\n";while (cin >> ch && toupper(ch) != "Q"){while (cin.get() != "\n")continue;if (!isalpha(ch)){cout << "\a";continue;}switch (ch){case "A":case "a":cout << "输入PO入栈:";cin >> po;if (st.isfull())cout << "栈满\n";elsest.push(po);break;case "P":case "p":if (st.isempty())cout << "栈空\n";else{st.push(po);cout << "PO # " << po << " popped\n";}break;}cout << "请输入A入栈,\n"<< "输入P出栈,输入Q退出。\n";}cout << "Bye\n";return 0;}

关键词: 抽象数据类型 自动变量 成员函数