数据结构 队列(基本入队,出队)

队列

  • 队列是一种操作受限的线性表,队列只允许在表的一端进行插入,在表的另一端进行删除。可进行插入的一段称为队尾,可进行删除的一端称为队头。
  • 队列的主要特点就是先进先出。依照存储结构可分为:顺序队和链式队。

数据结构 队列(基本入队,出队)_第1张图片

队列的特点

数据结构 队列(基本入队,出队)_第2张图片

         1. 队列为一种特殊的线性表,

         2.表的前端(front)进行删除操作,在表的后端(rear)进行插入操作,

         3. 进行插入操作的端称为队尾,进行删除操作的端称为队头

         4.队列中没有元素时,称为空队列。

         5.队列的数据元素又称为队列元素 

         6.在队列中插入一个队列元素称为入队

         7.从队列中删除一个队列元素称为出队

         8. 因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出

链式队列

链式队列 : 用链表形式实现的队列。链表结点为队列数据存储区,链表结点包括两部分数据存储区和指针存储区。
数据存储区 :存放真实有效数据的区域。
指针存储区 :存放下一个链表结点的地址。

队列的结构体

typedef sturct Queue{
    int data[MAX];		//顺序存储	数组模拟的队列
    int size;			//队列的大小(队列中元素的个数)
}Queue,*SeqQueue;

 队列的初始化(数组头做队头,数组尾做队尾)

SeqQueue init(){
    
    // 申请队列空间,即数组空间
    SeqQueue p=(Queue *)malloc(sizeof(Queue));
    
    if(p == NULL){
        return NULL;
    }
    
    //初始化队列的大小
    p-size = 0;
    
    for(int i=0;idata[i] = 0;
    }
    
    return p;
        
}

顺序存储   入队

void push(SeqQueue p,int value){
    
    if(p == NULL){		//队列不存在
        return;
    }
    
    if(p->size == MAX){
        printf("队列元素已满!\n");
        return;
    }
    
    //进队
    p->data[p->size] = value;
    
    
    //改变队列
    p->size++;
}

 顺序存储 出队 

void push(SeqQueue p){
    
    if(p == NULL){		//队列不存在
        return;
    }
    
    if(p->size == MAX){
        printf("队列元素已空!\n");
        return;
    }
    
    //出队		删除数组首元素
 
    for(int i = 0;isize-1;i++){
        p->data[i] = p->data[i+1];
    }
    
    
    //改变队列
    p->size--;
}

你可能感兴趣的:(数据结构)