ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-12-21 数据结构 期末复习机考之二 栈

2021-12-22 22:58:00  阅读:167  来源: 互联网

标签:12 出栈 入栈 top 栈顶 机考 2021 优先级 读取


栈和队列都是特殊的线性表,因此定义栈和队列与之前的线性表异曲同工:

顺序栈

顺序栈的架构

 

 顺序栈的特点

top=0  或top=base 表示空栈

base=NULL表示栈不存在

当插入新的栈顶元素时,指针top+1

删除栈顶元素时,指针top-1

当top>stacksize时,栈满,溢出

 注意,此处的top栈顶指针是指向栈顶元素的下一个元素,也有一种说法是指向栈顶元素,两种都可,此处采用前者

 1、创建栈

typedef int SElemType;

typedef struct{
    SElemType data[MAXSIZE];
    int top;//栈顶指针
}

或使用STL库的栈

 

头文件#include <stack>

关于入栈操作

Status Push(SqStack *S,SElemType e){
    if(S->top == MAXSIZE-1){
        return ERROR;
    }
    S->top++;
    S->data[S->top]==e;
    return ok;
}

 

或者

 

关于出栈操作

可以

Status Pop(SqStack *S, SElemType *e){
    if(S->top==-1)
        return ERROR;
    *e=S->data[S->top];
    S->top--;
    return OK;
}

或者 

 

亦或者

这里是先打印再弹出 

判栈满的函数

 

 用STL栈无法实现栈满的监测,因为STL栈没有栈满这个概念。

链栈

我们知道栈顶是一个栈做压入和弹出的地方,而链表形态下也拥有一个头指针,那么我们就可以利用头指针作为栈顶指针,对于链栈而言,因为栈顶是在链表头部,因此不存在栈满的情况(除非内存已满)

对于链栈而言,它和链表空的条件一样,就是头指针(栈顶指针)top==NULL 

栈的应用【编程】递归

说到递归,著名的斐波拉契数列就是一个递归数列,而斐波拉契数就是指符合斐波拉契数列运算方式得来的数。

 上图就是斐波拉契数列的原理,可以看到,除了0,1之外,斐波拉契数列的n项等于n-1和n-2项之和。直观实现特定位数的斐波拉契数列的程序在上面。但是不够简洁,不能提现斐波拉契的精髓

看看修改过的程序:

#include<iostream>

using namespace std;

int Feibo(int i){
    if(i<2)
        return i == 0?0:1;
    return Feibo(i-1)+Feibo(i-2);
}

int main(){
    int n=0;
    cin>>n;
    cout<<Feibo(n)<<endl;
    return 0;
}
/Users/yuwenao/untitled12/cmake-build-debug-/untitled12
9
34

进程已结束,退出代码为 0

实现了,优美的递归运用,通过三行代码实现feibo。而递归是

标签:12,出栈,入栈,top,栈顶,机考,2021,优先级,读取
来源: https://blog.csdn.net/Menou16/article/details/122068471

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有