大家好,今天跟新的是“栈的顺序存储”
栈的存储方式有两种, 一种是 顺序存储 和 一种是 链式存储, 现在要说的是 “顺序存储”
好吧,先介绍一下什么叫做“栈”!!
就我个人体会而言, “栈”就是被功能减少了的顺序表(或链表),为什么这样说呢!
因为栈是遵循 ”后进先出“ 的 规律的,不像普通的顺序表一样,可以在哪里删除插入都行
所以栈创建起来很想顺序表(或链表)
下面是创建栈的源代码:
/// head.h /
#include <iostream>
using namespace std;
#define STACKINITSIZE 20
#define INCRMENT 10
struct sqStack
{
char *base;
char *top;
int stackSize;
};
///栈的顺序存储结构
void InitStack( sqStack &S )
{
S.base = ( char * ) malloc ( STACKINITSIZE*sizeof(char) );
//其实这和顺序表是一样的,没区别
S.top=S.base;
S.stackSize=STACKINITSIZE;
}
bool GetTop( sqStack &S )
{
if( S.base==S.top )
{
cout<<"这是一个空栈! "<<endl;
return false;
}
cout<< "栈顶的元素是: "<<*(S.top-1)<<endl;
//这里为什么会是top-1呢?因为我的top是在最后一个元素的上面
//请看下面的插就知道了
}
bool Push( sqStack &S , char e)
{
if( S.top-S.base >= S.stackSize )
{
S.base=( char * ) realloc ( S.base, (STACKINITSIZE+INCRMENT)*sizeof(char) );
if( !S.base )
{
return false;
}
S.top=S.base+S.stackSize;
//记得要修改地址
S.stackSize+=INCRMENT;
}
*S.top++=e;
//这里就是GetTop的原因了top=e之后,再加一
return true;
}
///去掉最顶的元素
bool Pop( sqStack &S )
{
if( S.base==S.top )
{
return false;
}
--S.top;
return true;
}
// mian.cpp /
#include "head.h"
void InitStack( sqStack &S );
bool GetTop( sqStack &S );
bool Push( sqStack &S , char e);
bool Pop( sqStack &S );
void main()
{
sqStack S;
InitStack(S);
Push(S,'g');
Push(S,'s');
GetTop(S);
Pop(S);
GetTop(S);
}
好吧,明天再更新