GetT。P(S,e); 说明:取栈顶元素 Push (S,e) 说明:值为e的数据元素进栈(插入、压栈) P。p(S) 说明:栈顶元素出栈(删除、退栈) }
GetTop(S,e); 说明:取栈顶元素 Push (S,e); 说明:值为e的数据元素进栈(插入、压栈) Pop(S); 说明:栈顶元素出栈(删除、退栈) };
312栈的顺序存储结构 栈的顺序存储结构称为顺序栈,是用一组地址连续的 存储单元依次存放自栈底到栈顶的数据元素。 因为栈底位置是固定不变的,栈顶位置是随着进栈和退栈 操作而变化的,故需用一个变量top来指示当前栈顶位置, 通常称top为栈顶指针,参看图3.2。 a5 目 a4 a 3 2. top a al0 top top-l (a)空栈(b)al进栈(c)a2-a5相继进栈(d)a5a3相继出栈 图32顺序栈中栈顶指针和栈中数据元素之间的关系
栈的顺序存储结构称为顺序栈,是用一组地址连续的 存储单元依次存放自栈底到栈顶的数据元素。 3.1.2 栈的顺序存储结构 因为栈底位置是固定不变的,栈顶位置是随着进栈和退栈 操作而变化的,故需用一个变量top来指示当前栈顶位置, 通常称top为栈顶指针,参看图3.2
我们先以整数元素为例,给出顺序栈的基本 算法,在下一节,将给出顺序栈的模板类接口 定义以及基本运算的实现代码和应用实例。 typedef struct int*elem;//elem是数据元素数组 int top;//′栈顶指针 int maκsize;//栈容量 fsaStacki
Typedef struct { int *elem; // elem是数据元素数组 int top; // 栈顶指针 int maxSize; // 栈容量 }sqStack; 我们先以整数元素为例,给出顺序栈的基本 算法,在下一节,将给出顺序栈的模板类接口 定义以及基本运算的实现代码和应用实例
void Initstack(S, maxsize)∥/栈初始化 I s top=-li selem=new int[maxSize], F bool isEmpty(s)∥判栈空否? i return s top==-1; J bool isU11(S)∥/判栈满否? I return top==S. maxSize-li J bool Push(sqStack s, int e) ∥/值为e的数据元素进栈(插入、压栈) if(isFu11(s))∥/栈满(溢出)无法进栈,返回 false {cout<" ERROR:over£1。w!!n"; return false; 1 s elem [++S top] return true ∥/栈顶指针增1元素进栈返回true
void InitStack(S,maxSize) // 栈初始化 { S.top=-1; S.elem=new int[maxSize]; } bool isEmpty(S) // 判栈空否? { return S.top==-1; } bool isFull (S) // 判栈满否? { return top==S.maxSize-1; } bool Push (sqStack S, int e) // 值为e的数据元素进栈(插入、 压栈) { if(isFull(S)) // 栈满(溢出)无法进栈,返回false { cout << " ERROR: overflow !!\n"; return false; } S.elem[++S.top] = e ; return true ; //栈顶指针增1元素进栈,返回true }
bool Pop( tsTack S)//栈顶元素出栈(删除) 主f( isEmpty(s)//栈空无法删除,返回fa1se cout<<“ ERROR: unders1ow!!n”; return false s. top--i return true; //元素出栈 bool GetTop(sastack s, int &e) //取栈s的栈顶元//素 if( isEmpty(s))/栈空(下溢) cout < ERROR: underflow !!\n return false i e=selem[s top] i return true /元素存e,栈顶指针不变(元素没出栈)
bool Pop(sqStack S) // 栈顶元素出栈(删除) { if(isEmpty(S)) // 栈空无法删除, 返回false { cout << “ ERROR: underflow !!\n” ; return false ; } S.top--; return true; // 元素出栈 } bool GetTop(sqStack S, int &e) // 取栈S的栈顶元//素 { if(isEmpty(S)) // 栈空(下溢) { cout << “ ERROR: underflow !!\n” ; return false ; } e=S.elem[S.top] ; return true ; // 元素存e, 栈顶指针不变(元素没出栈) }