数据结构5:栈

只允许在同一端点处进行插入或删除的表结构成为栈

插入的一端称为栈顶;另一端称为栈尾。

将元素放入栈是进栈,将元素取出成为退栈

特点

  • 栈是一种后进先出结构
  • 又称后进先出表(LIFO表)

分类

  • 顺序栈
  • 链式栈

一、顺序栈

1.定义

#define EMPTY -1 //空栈的栈顶指针
const int m=1000;//预定的栈空间大小
int s[m];//定义顺序栈
  • 进栈退栈算法需要能够配合
  • 程序执行期间,降不定期的进栈、出栈
  • 开始时,栈空,指针top的值等于EMPTY

2.进栈算法

int push(int s[],int &top,int x)//进栈函数
{
    if(top==m-1)return 0;//表示栈满,不能进栈
    s[++top]=x;
    return 1;//表示进栈成功
}

3.退栈算法

int pop(int s[],int &top,int &x)//退栈函数
{
    if(top==EMPTY)return 0;//表示栈空,不能出栈
    x=s[top--];
    return 1;//表示出栈成功
}

4.两个堆栈利用空间

typedef struct stack{
    int a[N];
    int top1,top2;
}stack;
stack s;
//top1位于最左侧,top2位于最右侧,如果top1==top2,则说明栈满。

二、链式栈

1.进栈算法

int push(ptr &top,int x)
{
    ptr p;
    p=new snode;//申请结点
    if(p==NULL)return 0;//申请失败
    p->data=x;//x进栈
    p->next=top;//表头插入法
    top=p;//修改表头指针
    return 1;//进栈成功
}

2.出栈算法

int pop(ptr &top.int &x){
    ptr p;
    if(top==NULL)return 0;//退栈不成功
    x=top->data;
    p=top;//表头删除法
    top=top->next;
    free(p);
    return 1;//退栈成功
}

三、栈的应用——程序中断

​ 中断是操作系统实现程序“并发执行”的重要技术。当程序要求输入输出数据时,主机向外设发出输入输出命令,由外设完成具体的输入输出操作。由于主机速度比外设速度快得多,为了提高主机工作效率,主机在发出输入输出命令后,不是空等外设传输完毕在工作,而是继续运行系统中的其他程序。

中断:一个程序执行期间,被其他程序所打断。

断点:打断的地方

现场:被打断的程序当前执行情况

扫描二维码关注公众号,回复: 11256907 查看本文章

栈架:一个现场

保护现场和回复现场,嵌套中断的现场需要层层保护。必须“后进先出”——栈

猜你喜欢

转载自blog.csdn.net/jiangSummer/article/details/106267424