目录
(一)顺序栈图文解析
顺序栈是指利用顺序存储结构实现的栈,,即利用一组地址连续的存储单位(数组)依次存放自栈底base到栈顶top的数据元素,同时设置指针top表示栈顶元素在顺序栈中的位置。
<mark>用简洁的话来讲</mark>
顺序栈不像顺序表,顺序栈只能从上往下一个个的网数组添加数据,出来也只能从上往下一个一个取出来。
其中栈底base为数组空间,而栈顶top作为一个指针为栈顶确定位置,每添加一个数据,top加一,每减少一个,top减一。
(二) 顺序栈代码解析
(1) 顺序栈的基本操作
1.1 顺序栈的存储结构
#define MAXSIZE 100
typedef struct
{
int *base; //栈底指针,指向栈底
int *top; //栈顶指针,指向栈顶
int stacksize; //栈的最大容量
}SqStack;
1.2 初始化顺序栈
void InitStack(SqStack &S)
{
S.base=(int*)malloc(MAXSIZE*sizeof(int));//为顺序栈的栈底分配一个最大容量为MAXSIZE的空间
if(S.base)
printf("内存分配成功\n");
S.top=S.base; //空栈,即栈底等于栈顶
S.stacksize=MAXSIZE; //栈的最大容量
}
1.3顺序栈的入栈
void Push(SqStack &S,int e)
{
if(S.top-S.base==S.stacksize)//栈满时栈顶到栈顶之间的空间等于栈的最大容量
printf("栈满!");
else //栈顶自加一
*(S.top++)=e;//先*S.top=e,然后S.top++
}
1.4 顺序栈的出栈
void Pop(SqStack &S,int &e)
{
if(S.top==S.base)//当栈顶等于栈底,则栈为空
printf("栈空");
else //栈顶自减一
e=*(--S.top);//先S.top--,然后e=*S.top
}
1.5 取栈顶元素
void GetTop(SqStack S)
{
if(S.top!=S.base)
printf("%d",*(S.top-1));//输出栈顶所指位置的下面一个数据元素
}
(2) 顺序栈源代码及测试
2.1 源代码
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
void InitStack(SqStack &S)
{
S.base=(int*)malloc(MAXSIZE*sizeof(int));
if(S.base)
printf("内存分配成功\n");
S.top=S.base;
S.stacksize=MAXSIZE;
}
void Push(SqStack &S,int e)
{
if(S.top-S.base==S.stacksize)
printf("栈满!");
else
*(S.top++)=e;
}
void Pop(SqStack &S,int &e)
{
if(S.top==S.base)
printf("栈空");
else
e=*(--S.top);
}
void GetTop(SqStack S)
{
if(S.top!=S.base)
printf("栈顶:%d\n",*(S.top-1));
}
int main()
{
SqStack S;
int e;
InitStack(S);
Push(S,10);
Push(S,20);
Push(S,30);
printf("入栈10 20 30\n");
GetTop(S);
Pop(S,e);
printf("出栈一次\n");
GetTop(S);
return 0;
}
2.2 测试结果
测试环境 : Windows 10
编译软件 : Visual C++ 6.0