数据结构笔记 第三章 栈和队列

栈的基本概念:

1.只能在一端进行插入,删除操作的线性表

2.当栈没有元素的时候称为空栈

栈的特点:先进后出

栈能适用于递归算法,表达式求职以及括号匹配等问题

有n个元素按照某种顺序入栈,则出栈方式有1/(N+1)*C(n,2n)。

栈的基本操作

入栈

Push(&S,x) 判断栈S是否为满

出栈

Pop(&S,&x)判断栈S是否为空

栈的存储结构

顺序栈(顺序存储)的结构

1.栈空时 栈顶指针top=-1

栈满时 top=MAXSIZE-1

顺序栈的基本操作

1.初始化

2.判断栈是否为空

(bool类型)

3.进栈

栈不满时,

栈顶指正先加1,

再送值到栈顶元素

4.出栈

栈非空时

先去栈顶元素之=值

再讲栈顶指正减1

#define MaxSize 50

typedef struct{

ElemType data[Maxsize];

int top;//整数型指针

}

void InitStack(SqStack &S){
         S.top=-1
}

bool StackEmpty(SqStack S){

        if top==-1

   return true;

else

   return false;
}

bool Push(SqStack &S,ElemType x){

    if (S.top==Maxsize-1)

         return false;

     else

         S.data[++S.top]=x;

  return true;

}

bool Pop(SqStack &S,ElemType x){

    if (S.top==-1)

         return false;

     else

         x=S.data[S.top--];

  return true;

}

共享栈

栈满:top0+1=top1

栈的链式结构

链式栈

便于多个栈共享存储空间和提高效率,

且不存在栈满上溢的情况

typedef struct LinkNode{

   elemtype data;

   struct LinkNode *next;

}

队列 

队列的基本概念:

只允许在表的一端进行插入,而在表的另一端进行删除。

队头出队,队尾入队

特性:先进先出

队列的基本操作

入队

EnQueue(&Q,x);不可为满

出队

DeQueue(&Q,&x);不可为空

队列的顺序存储

初试状态

Q.front=Q.rear=0

判空状态

Q.front==Q.rear==0

进队操作

队不满时,先送值到队尾元素值,再讲队尾指针加1

rear=rear+1

出对操作

队不空时,先取队头元素值,再将队头指针加1

front=front+1

循环队列

把存储队列元素的表从逻辑上视为一个圆

最大容量:Maxsize-1

初试状态

Q.front=Q.rear=0

队首指针进1

Q.front=(Qfront+1)%MAXSIZE

队尾指针进1

Q.rear=(Q.rear+1)%MAXSIZE

队列长度

(Q.rear-Q.front+MAXSIZE)%MAXSIZE

队空条件:Q.front==Q.rear

牺牲一个单元来区分队空和堆满

队满条件:(Q.rear+1)%MAXSIZE==Q.front

队列的链式存储结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿崽meitoufa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值