抽象數據類型(abstract data type, ADT)以通用的方式描述數據類型。C++中類的概念非常適合于ADT方法。例如,C++程序通過堆棧來管理自動變量,堆棧可由對它執行的操作來描述。
- 可創建空堆棧;
- 可將數據項添加到堆頂(壓入);
- 可從棧頂刪除數據項(彈出);
- 可查看堆棧是否填滿;
- 可查看堆棧是否為空;
可將上述描述轉換為一個類聲明,其中公有成員函數提供了表示堆棧操作的接口,私有數據成員負責存儲堆棧數據。類聲明頭文件stack.h代碼如下:
#pragma once
#ifndef STACK_H_
#define STACK_H_
typedef unsigned short Item;
class stack
{
private:enum {MAX=10};///stack類作用域中的常量Item items[MAX];int top;
public:stack();bool isempty() const;bool isfull() const;bool push(const Item& item);bool pop(const Item& item);
};
#endif // !STACK_H_
對應的源碼文件代碼如下:
#include "stack.h"stack::stack()
{top = 0;
}
bool stack::isempty() const
{return top == 0;
}
bool stack::isfull() const
{return top == MAX;
}
bool stack::push(const Item& item)
{if (top < MAX){items[top] = item;top = top + 1;return true;}else{return false;}
}
bool stack::pop(Item& item)
{if (top > 0){top = top - 1;item = items[top];return true;}else{return false;}
}
程序說明:
- 程序通過創建一個獨立的數組來表示堆棧,并使用枚舉創建了一個符號常量來表示堆棧的大小。
- 構造函數表示創建的堆棧為空,索引值為0;
- isempty()和isfull()函數用來判斷堆棧是否為空或堆棧是否已滿,通過索引值來判斷即可;
- push()函數表示將一個數據壓入堆棧,將數據壓入堆棧后,索引值隨之改變,如返回true,則表示數據成功壓入堆頂。
- pop()函數表示將一個數據彈出堆棧,彈出的數據通過函數參數返回出來,同時索引值相應的減一,如返回值為true,則表示數據彈出成功。
- 頭文件使用typedef用Item來表示unsigned short,如果需要double或結構類型的堆棧,只需修改typedef語句即可,類聲明和方法定義保持不變。