第三章、栈
栈是一种特殊的线性表,一般来说在线性表的插入删除不受控制,而栈上的插入删除操作会受限制,栈的插入和删除操作是在童一端进行的。
一、栈
1.基本概念
栈是仅限定在表的一端进行插入或删除操作的线性表。
允许插入和删除操作的顶端称为栈顶,处于栈顶位置的元素称为栈顶元素。相应的称为栈底。栈中含有的元素个数称为栈长;不含元素的空表称为空栈。
由于栈的插入和删除运算仅在栈顶一端进行,后进栈的元素必定先出栈,所以又把栈称为后进先出表(Last In First Out, 简称LIFO)。
2.栈的顺序存储结构
栈既然是一种线性表,所以线性表的顺序存储和链接存储结构同样适用于栈。
栈的顺序存储结构同样需要使用一个数组和一个整型变量来实现,利用数组来顺序存储栈中的所有元素,为了方便将数组的最后一个元素作为栈顶;利用整型变量top来存储栈顶元素的下标,其作用相当于栈顶指针,若top初始值为-1则表示空栈。
栈的基本操作
(1)初始化操作:生成长为len的非空栈,len不能超过数组的最大长度
#include "stdio.h"
#define maximum 100 /*最大空间*/
int top=-1;
Datatype stack[maximum];
void CreatStack(int *stack,int len) //创建顺序栈
{
if(len>maximum)
{
printf(""长度超过最大限制);
return;
}
int value;
for(int count=0;count<len;count++)
{
scanf("%d",&value);
stack[count]=value;
top++;
}
}
(2)入栈操作:
首先将top指针后移一位即值+1,然后在此处插入新元素x;当top==maximum-1的时候,表示栈满,不能插入
void Push(int *h,int value)
{
if(top==maximum-1)
{
printf("栈满");
return;
}
top++;
h[top]=value;
return;
}
(3)出栈操作:
首先将top指针处元素x出栈;top值-1;
void Pop(int *h,int *e) //e存放出站元素的值
{
if(top==-1)
{
printf("栈空");
return;
}
*e=h[top];
top--;
return;
}
(4)计算栈长:
栈长=top+1(由于top表示数组下表,从0开始)
int StackLength() //e存放出站元素的值
{
return(top+1);
}
回头再看