ToB企服应用市场:ToB评测及商务社交产业平台
标题:
数据结构 1-3 栈
[打印本页]
作者:
熊熊出没
时间:
9 小时前
标题:
数据结构 1-3 栈
一、原理
栈是只答应在一端进行插入或删除操纵的线性表
所谓的栈,实在就是一个特别的线性表(次序表、链表),但是它在操纵上有一些特别的要求和限制:
栈的元素必须“后进先出”
栈的操纵只能在这个线性表的表尾进行。
对于栈来说,这个表尾称为栈的栈顶(top),相应的表头称为栈底(bottom)。
先进后出FILO
栈的插入和删除操纵:
栈的插入操纵(Push),叫做
进栈
,也称为压栈,入栈。
栈的删除操纵(Pop),叫做
出栈
,也称为弹栈。
二、次序存储实现栈
2.1 界说栈
#define MaxSize 50
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];
int top;
}Stack;
复制代码
2.2 初始化栈
void init_stack(Stack &S) {
S.top = -1;//初始化栈,让栈为空
}
复制代码
2.3 判断栈为空
bool stack_empty(Stack S) {
if (-1 == S.top) {
return true;
}
else {
return false;
}
}
复制代码
2.4入栈
bool push(Stack &S, ElemType x) {
//判断栈是否满?
if (S.top == MaxSize -1) {
return false;
}
S.data[++S.top] = x; //等于S.top = S.top +1;S.data[S.top]=x;
return true;
}
复制代码
注意:入栈需要判断栈是否为满,为满则不能再插入数据
2.5 出栈
出栈则需要先判断栈是否为空,为空的栈不需要出栈
bool pop(Stack S, ElemType m) {
if (stack_empty(S)) {
return false;
}
m = S.data[S.top--];等于S.data[S.top]=x;S.top = S.top -1;
return true;
}
复制代码
2.6得到栈顶
bool get_top(Stack S, ElemType &m) {
if (stack_empty(S)) {
return false;
}
m = S.data[S.top];
return true;
}
复制代码
2.7 运行主函数
int main() {
Stack S;
init_stack(S);
//判断栈是否为空
bool flag;
flag = stack_empty(S);
if (flag) {
printf(("stack is empty"));
}
push(S,3); //入栈
push(S,5); //入栈
push(S,6); //入栈
push(S,7);
ElemType m;
flag = get_top(S, m);
if (flag) {
printf("get top %d\n",m);
}
flag = pop(S, m);//弹出栈元素
if (flag) {
printf("pop ele %d\n",m);
}
return 0;
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4