2.1 队列

队列

队列是一种特殊的线性结构,它只允许在队列的首部head进行删除,以及在尾部tail进行插入
这两种操作分别被称为“出队”和“入队”。而当队列中没有元素即head=tail时,称其为“空队列”

我们现在可以将队列的三个基本元素(一个数组,两个变量)封装为一个结构体类型

struct queue{
    int data[100] ; //存储内容的主体
    int head ;  //队首
    int tail ;  //队尾
};

//——————————————————————————
struct queuq q;//定义结构体变量,和其它数据类型一样

上面定义了以一个结构体类型,我们通常把它放在main外面,其定义末尾有一个;
其中,strcut是结构体的关键字,queue是我们为这个结构体起的名字
这个结构体有三个成员:整型数组data,整型head,tail。这样以来,我们就可以把它们当作一个整体来看待
访问结构体内的内部成员使用点(.)

下面这段代码就是我们用结构体实现队列操作的实例

代码示例

struct queue{
    int data[100] ; //存储内容的主体
    int head ;  //队首
    int tail ;  //队尾
};

int main(){
    struct queue q ; 
    int i ;

    //下面初始化队列
    q.head = 1 ; 
    q.tail = 1 ;

    for(i = 1 ; i<= 9 ; i ++){
        //依次向队列中插入九个数
        scanf("%d",&q.data[q.tail]);
        q.tail++ ; 
    }

    while(q.head < q.tail){
        //当队列不为空的时候进行这个循环操作

        //打印队首并将队首出队
        printf("%d",q.data[q.head]);
        q.head++;

        //先将新的队首的数添加到队尾
        q.data[q.tail] = q.data[q.head];
        q.tail++;

        //再将队首出队
        q.head++ ;
    }

    getchar();getchar();
    return 0 ;
}
上一篇:单调队列dp优化


下一篇:LeetCode 941 有效的山脉数组 题解