栈的顺序存储基本操作

大家好,今天跟新的是“栈的顺序存储”

栈的存储方式有两种, 一种是 顺序存储 和 一种是 链式存储, 现在要说的是 “顺序存储”

好吧,先介绍一下什么叫做“栈”!!

就我个人体会而言, “栈”就是被功能减少了的顺序表(或链表),为什么这样说呢!

因为栈是遵循  ”后进先出“ 的 规律的,不像普通的顺序表一样,可以在哪里删除插入都行

所以栈创建起来很想顺序表(或链表)

下面是创建栈的源代码:



///       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);
}


好吧,明天再更新
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值