首页 > 编程语言 > 详细

c语言数据结构学习心得——队列

时间:2019-03-26 00:52:28      阅读:330      评论:0      收藏:0      [点我收藏+]

队列

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

队头(Front):允许删除的一端(队首)

队尾(Rear):允许插入的一端

FIFO:先进先出

    不要求从数组首位开始存储队列

#define MaxSize 50  //定义队列中元素的最大个数
typedef struct{
    ElemType data[MaxSize];  //存放队列元素
    int front,rear;  //队头指针和队尾指针
}SqQueue;

循环队列

其中,首尾相连的顺序存储的队列叫循环队列

入队:rear=(rear+1)%MaxSize

出队:front=(front+1)%MaxSize

队空:front=rear

队满:数组中仍有一个空余单元

队满时:(rear-front+MaxSize)%MaxSize

1.入队

bool EnQueue(SqQueue &Q,ElemType x){
    if((Q.rear+1)%MaxSize==Q.front) return false;//队满
    Q.data[Q.rear]=x;
    Q.rear=(Q.rear+1)%MaxSize;
    return true;
}

2.出队

bool DeQueue(SqQueue &Q,ElemType &x){
    if(Q.rear==Q.front) return false;//队满
    x=Q.data[Q.front];
    Q.rear=(Q.front+1)%MaxSize;
    return true;
}

 

链式队列

typedef struct{  //链式队列结点
    ElemType data;  
    struct Link Node *next;  
}Link Node;

typedef struct{  //链式队列
    ElemType data;  
    Link Node *front,*rear;//队头和队尾指针
}Link Queue;
 

1.入队

void EnQueue(LinkQueue &Q,ElemType x){
    s=(LinkNode *)malloc(sizeof(LinkNode));
    s->data=x;
    s->next=NULL;
    Q.rear->next=s;
    Q.rear=s;
}

2.出队

bool DeQueue(LinkQueue &Q,ElemType &x){
   if(Q.front==Q.rear) return false;  //空队
   p=Q.front->next;
   x=p->data;
   Q.front->next=p->next;
   if(Q.rear==p) Q.rear=Q.front;  //原队列只有一个结点删后变空队
   free(p);
   return true;
}

 

双端队列

具体见上传图片

 

总结

技术分享图片

c语言数据结构学习心得——队列

原文:https://www.cnblogs.com/suprechen/p/10597491.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!