栈和队列上课笔记

一.栈

1.栈的顺序实现

Typedef stuct{
    ElemType data[stacksize];
    int topi;
}sqstack

当一个栈的输入顺序是1,2,3,4,5时,什么样的输出序列是正确的?

当输出开头是输入的最后一个数时,后面输出的数则不能有超过后一个数的

 

二.队列

3.顺序队列

Comst int QueueSize = 20;
    typedef Struct sqqueue{
        EemType data[QueueSize];
        int front,rear;  ##front为头指针,rear为尾指针
}squeue

从图中可以看出,如果指针fornt == rear 队列为空,而当rear ==QueueSize - 时,队列为满,如果在加入新元素,就会产生“溢出”,但是,这种溢出并不是真正的溢出,在data数组的前端可能还有空位置,所以这是一种假溢出,为了能使能够重复利用数组中的储存空间,把数组的前端和后端连接起来,形成一个环形表,成为循环队列。

因此,一维队列可以变成如下图所示

///如何看队列是满还是不满

空的条件是:front == rear

队满的条件是:(rear +  1)%QueueSize== front

front 和rear在循环队列中循环时,当他们到了5是,需要进行/5取余运算,继续从头开始循环。

循环队列算法:

1.队列初始化

目的:分配存储空间

使用void()函数

void initqueue(squeue *qu)
{
    qu = (squeue *)malled(size(squeue))
    
    qu ->rear = 0;
    qu ->front = 0;
}


    

2.入队列

int enqueue(squeue *sq, ElemType x)
   {
        if ((sq ->rear +1)%QueueSize == sq ->front)  //判断队列是否为满
            return 0;
        sq ->rear = (sq ->rear + 1)%QueueSize;
        
        sq ->data[sq -> rear] = x;
        return 1;
}

3.出队列

int outqueue(squeue *sq, ElemType x)
{    
    if(sq ->rear == sq ->front) /判断是否为空
        return 0;
    sq->front = (sq->front + 1)%QueueSize;
        x = sq->data[sq->front];
        return 1;
}
    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值