栈的知识点

栈:只允许在一段进行插入或删除操作。
栈顶:栈中允许进行插入和删除的那一端。
操作特点:后进先出
顺序栈
注:1.top值不能超过最大值max
2.空栈的判定条件通常为top==-1,满栈的判定条件通常为top=max-1,栈中数据元素个数为top+1
顺序栈操作
1.判空:

 bool empty(stack s)
    {
         if(s.top==-1)  return true;
         else   return false;
    }

2.进栈:

bool push(stack &S,elemtype x)
{
    if(s.top==max-1)  return false;
    s.data[++top]=x;
    return true;
}

3.出栈:

bool pop(stack &S,elemtype &x)
{
   if(s.top==-1)  return false;
   s.data[top--]=x;
   return true;
}

4.读取栈顶元素:

bool gettop(stack S,elemtype &x)
{
    if(top==-1)  return false;
    x=s.data[s.top]; 
    return true;
}

共享栈:

栈满条件:指针top1和top2只相差1,即top1+1=top2
结构:

 #define max 100
  typedef struct a
  {
     elemtype data[max];  //存放栈顶元素
     int top1;  //栈1栈顶指针
     int top2;  //栈2栈顶指针
  }sqdouble; 

进栈:
栈满条件:指针top1和top2只相差1,即top1+1=top2

 bool plus(sqdouble &S , elemtype x , int  stacknum)
  {
    if(s.top+1==s.top2)    return false;     //栈满
    if(stacknum==1)     s.data[++s.top1]=x;  //栈1有元素进入
    if(stacknum==2)     s.data[--s.top2]=x;  //栈2有元素进入
  }
  //stacknum 为栈的编号

链式栈
注:可以将头指针作为栈顶指针,所以栈顶放在单链表头部
1.链栈一般不存在栈满的情况
2.空栈的判定条件通常为top==NULL

typedef struct snode
    {
        elemtype data;  //存放栈中元素
        struct snode *next;  //栈顶指针
    }snode ,*slink  //链栈的结点
    typedef struct linkstack
    {
       slink top;  //栈顶指针
       int count;  //链栈结点数
    }linkstack;  //链栈

进栈:

bool push(linkstack *S,elemtype x)
{
  slink p=(slink)malloc(sizeof(snode));
  p->data=x;   
  p->next=p;  //p的后继指向栈顶元素
  s->top=p;   //栈顶指针指向新的元素
  s->count++;   //栈中元素个数加1
  return true;
}

出栈:

bool pop(linkstack *S,elemytpe &x)
{
   if(s->top==NULL)  return false;
   x=s->top->data;   //栈顶元素值
   slink p=s->top;    //辅助指针
   s->top=s->top->next;   //栈顶指针后移
   free(p);  //释放被删除数据存储空间
   s->count--;  //栈中元素个数减一
   return true;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值