s311栈的逻辑结构 (三)基本操作使用示例 编写一个带编辑功能的从终端上接收字符的程序 若依次输入 “#代表退格; Cgf# HIna##NA “@”表示作废 则相当于输入 CHINA 若依次输入 chiachina ·则相当于输入CHNA
6 §3.1.1 栈的逻辑结构 • (三) 基本操作使用示例 • 编写一个带编辑功能的从终端上接收字符的程序 • 若依次输入: Cg#HIna##NA 则相当于输入CHINA • 若依次输入 chi@CHINA • 则相当于输入CHINA “#”代表退格; “@”表示作废
Init(s) ch= getcho,∥读入一个字符 while(ch=EOF)∥当未读入结束符时,一直循环 switch(ch) case '# Pop(s); break case(a Clear(s); break default Push(s, ch ch=getcho
7 … … Init(s); ch = getch(); //读入一个字符 while (ch!=EOF) //当未读入结束符时,一直循环 { switch(ch) { case '#' : Pop(s); break; case '@' : Clear(s); break; default: Push(s, ch); } ch = getch(); }
§3.11栈的逻辑结构 (四)栈抽象类 template <class TElem> class STacke protected long len ublic long getLen(void)return len;) char IsEmpty(return (len<=0)? 1: 0;) virtual TElem& push(telem &elem)=0 virtual TElem& pop (void)=0 virtual TElem& GetTop(void)=0
8 §3.1.1 栈的逻辑结构 • (四)栈抽象类 template <class TElem> class TStack0 { protected: long len; public: long GetLen (void) {return len; }; char IsEmpty ( ) {return (len<=0)? 1:0; }; virtual TElem& Push (TElem &elem) =0; virtual TElem& Pop (void) =0; virtual TElem& GetTop (void) =0;
s311栈的逻辑结构 (四)栈抽象类 virtual TElem& rollDown(=0 virtual TElem& rollup (=0 virtual void Clear(=0;
9 §3.1.1 栈的逻辑结构 • (四)栈抽象类 virtual TElem& RollDown ( ) =0; virtual TElem& RollUp ( ) =0; virtual void Clear ( ) =0; }
s3.12栈的顺序存贮结构 (-)存贮方法 ·栈是一种特殊的线性表,本节先介绍顺序存贮方式 用一维数组模拟连续的存贮空间 ·用一个量指示插入/删除端的位置,一般称该量为栈顶 指针 元素空间: al a az a 栈顶指示器: 图栈顺序存储结构 假设栈底在地址小的一端
10 §3.1.2 栈的顺序存贮结构 • (一) 存贮方法 • 栈是一种特殊的线性表,本节先介绍顺序存贮方式 • 用一维数组模拟连续的存贮空间 • 用一个量指示插入/删除端的位置,一般称该量为栈顶 指针 a1 a2 a3 a4 … … an 元素空间: 栈顶指示器: 图 - 栈顺序存储结构 假设栈底在地址小的一端