线性表——顺序栈

特点

LIFO后进先出

有顺序栈和链栈两种

3.1顺序栈

3.1.1类型说明

typedef struct {
    ElemType elem[Stack_Size];
    int top;//栈顶下标
  }SeqStack;

top==-1,表示栈空;

top== stacksize-1,表示栈满;

3.1.2初始化

void  InitStack ( SeqStack  * s )
 {
      S->top= -1;
}

3.1.3入栈

int  Push ( SeqStack *S, ElemType e )
{
     S->top++;
     S->elem[S->top]=e;
     return TRUE;
}

3.1.4出栈

int  Pop ( SeqStack *S, ElemType *e )
{
      *e=S->elem[S->top];
      S->top--;
      return TRUE;
}

3.1.5读取栈顶元素

int  GetTop ( SeqStack *s, ElemType *e )
{
     *e=S->elem[S->top];
     return TRUE;
}

3.1.6两栈共享技术

原因:

会因为栈空间大小难以准确估计,产生有的栈溢出,有的栈还很空闲的情况

特点:

栈底位置不变,而栈顶位置动态变化

3.1.6.1定义

#define  M  100

typedef struct
{
    ElemType Stack[M];//共有栈
    int top[2];//两个栈顶指示器
} DqStack;

3.1.6.2初始化

void InitStack ( DqStack *S )
{
      S->top[0]=-1;
      S->top[1]=M;
}

3.1.6.3入栈

int Push(DqStack *S, ElemType x, int i)
{  if(S->top[0]+1==S->top[1])  return(FALSE);  //栈满
    switch(i)//选择在哪一侧入栈
    { case 0: S->top[0]++; S->Stack[S->top[0]]=x;  break;
      case 1: S->top[1]--; S->Stack[S->top[1]]=x;  break;
    }
    return(TRUE);
}

3.1.6.4出栈

int Pop(DqStack *S, ElemType *x, int i)
{  switch(i)
   { case 0:  if(S->top[0]==-1)  return(FALSE);
              *x=S->Stack[S->top[0]]; S->top[0]--;  break;
     case 1: if(S->top[1]==M)  return(FALSE);  
           *x=S->Stack[S->top[1]]; S->top[1]++;  break;

   }
   return(TRUE);
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值