数据结构期末复习-编程实现栈的定义、入栈、出栈

顺序栈

顺序栈的表示

#define MAXSIZE 100
typedef struct
{
  SElemType *base;        //栈底指针
  SElemType *top;         //栈顶指针
  int stacksize;          //栈可用的最大容量
}SqStack;

顺序栈的初始化

Status InitStack( SqStack &S )
{
  S.base =new SElemType[MAXSIZE]; //为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
  if( !S.base ) return OVERFLOW;  //存储分配失败
  S.top = S.base;  //top初始为base,空栈
  S.stackSize = MAXSIZE; //stacksize置为栈的最大容量MAXSIZE
  return OK;
}

顺序栈入栈

Status Push( SqStack &S, SElemType e) 
{
  if( S.top - S.base== S.stacksize ) // 栈满
  return ERROR; 
  *S.top++=e;     //元素e压入栈顶,栈顶指针加1
  return OK;
}

顺序栈出栈

Status Pop( SqStack &S, SElemType &e) 
{
  if( S.top == S.base ) // 栈空
  return ERROR; 
  e=*--S.top;     //栈顶指针减1,将栈顶元素赋给e
  return OK;
}

顺序栈取栈顶元素

Status GetTop( SqStack S, SElemType &e) 
{
  if( S.top == S.base ) return ERROR; // 栈空
  e = *( S.top – 1 ); //返回栈顶元素的值,栈顶指针不变
  return OK;
}

链栈

链栈的表示

typedef struct StackNode 
{
  SElemType data;
  struct StackNode *next;
 } StackNode, *LinkStack;
LinkStack S;

链栈的初始化

Status StackEmpty(LinkStack S)  
{  
  if (S==NULL) return TRUE;  
  else return FALSE;  
}

链栈的入栈

Status Push(LinkStack &S , SElemType e)  
{
  p=new StackNode; //生成新结点p 
  if (!p) exit(OVERFLOW);
  p->data=e;//将新结点数据域置为e
  p->next=S;//将新结点插入栈顶
  S=p;//修改栈顶指针为p
  return OK;
}

链栈的出栈

Status Pop (LinkStack &S,SElemType &e)
{
  if (S==NULL) return ERROR;//栈空
  e = S-> data;//将栈顶元素赋给e
  p = S;//用p临时保存栈顶元素空间,以备释放
  S = S-> next;//修改栈顶指针
  delete p;//释放原栈顶元素的空间
  return OK; 
}

取链栈栈顶元素

SElemType GetTop(LinkStack S)
{
  if (S==NULL) exit(1);//栈非空
  else 
  return S–>data;//返回栈顶元素的值,栈顶指针不变
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值