只允许在同一端点处进行插入或删除的表结构成为栈
插入的一端称为栈顶;另一端称为栈尾。
将元素放入栈是进栈,将元素取出成为退栈。
特点:
- 栈是一种后进先出结构
- 又称后进先出表(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 查看本文章
栈架:一个现场
保护现场和回复现场,嵌套中断的现场需要层层保护。必须“后进先出”——栈