赞
踩
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。——百度百科
重点:只能操作
结构体定义栈
// 栈结构体
typedef struct stack {
elemType data[maxSize]; // 数组模拟栈
elemType top; // 栈顶,top表示当前栈顶元素在数组中的下标
} Stack;
// 初始化栈
bool InitStack(Stack &S) {
S.top = -1; // 初始化栈顶下标为-1表示栈为空
return true;
}
// 压栈/入栈
bool push(Stack &S, elemType e) {
// 首先判断栈是否已满
if (S.top == maxSize - 1) {
return false;
}
// 注意需要先让top++再入栈,因为top指向的是目前的栈顶元素,top代表的是下标
S.top++;
S.data[S.top] = e;
return true;
}
// 弹栈/出栈
bool pop(Stack &S, elemType &e) {
// 首先判断栈是否为空
if (S.top == -1) {
return false;
}
e = S.data[S.top]; // 函数在设计参数的时候,传入了一个e来接收入栈元素
S.top--; // S.data[S.top]这个元素实际还在数组中,但只要top--不指向该元素就能模拟出弹栈的操作了
return true;
}
// 获取栈顶元素,注意获取栈顶元素但并不会让元素出栈
elemType GetTop(Stack S){
// 首先判断栈是否为空
if(S.top == -1){
return false;
}
return S.data[S.top];// 直接返回当前栈顶元素即可
}
#include <iostream> using namespace std; #define maxSize 10 typedef char elemType; // 栈结构体 typedef struct stack { elemType data[maxSize]; // 数组模拟栈 elemType top; // 栈顶,top表示当前栈顶元素在数组中的下标 } Stack; // 初始化栈 bool InitStack(Stack &S) { S.top = -1; // 初始化栈顶下标为-1表示栈为空 return true; } // 压栈/入栈 bool push(Stack &S, elemType e) { // 首先判断栈是否已满 if (S.top == maxSize - 1) { return false; } // 注意需要先让top++再入栈,因为top指向的是目前的栈顶元素,top代表的是下标 S.top++; S.data[S.top] = e; return true; } // 弹栈/出栈 bool pop(Stack &S, elemType &e) { // 首先判断栈是否为空 if (S.top == -1) { return false; } e = S.data[S.top]; // 函数在设计参数的时候,传入了一个e来接收入栈元素 S.top--; // S.data[S.top]这个元素实际还在数组中,但只要top--不指向该元素就能模拟出弹栈的操作了 return true; } // 获取栈顶元素,注意获取栈顶元素但并不会让元素出栈 elemType GetTop(Stack S){ // 首先判断栈是否为空 if(S.top == -1){ return false; } return S.data[S.top];// 直接返回当前栈顶元素即可 } int main() { //....测试代码.... return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。