程序员社区

数据结构(队列)

队列是只允许在一端进行插入操作,在另一端进行删除操作的线性表。先进先出(First in First out)

循环队列的结构

struct SqQueue{
    int data[MAXSIZE];
    int front;   //头指针
    int rear;    //尾指针
};

初始化

void Initqueue(SqQueue Q){
    Q->front=0;
    Q->rear=0;
}

求队列长度

int QueueLength(SqQueue Q){
    return (Q.rear-Q.front+MAXSIZE) % MAXSIZE;
}

 

入队  出队

bool Enqueue(SqQueue Q,int x){
    if((Q->rear+1)%MAXSIZE==Q->front){
        return false;
    }
    Q->data[Q->rear]=x;
    Q->rear=(Q->rear+1)%MAXSIZE;  //整合rear和front大小的问题 
    return true;
} 

bool Dequeue(SqQueue Q){
    if(Q->front == Q->rear){
        return false;
    }
    Q->front=(Q->front+1)%MAXSIZE;
    return true;
} 

 

队列的链式存储   头结点front>>队头a1>>结点a2>>队尾rear

结构

typedef struct QueuePrt *Next;
struct QueuePrt{   //结点结构 
    int data;
    Next next;
};

struct Linlqueue{  //链表结构
    Next front,rear;
}; 

入队和出队

bool EnQueue(LinkQueue Q,int e){
    QueuePrt s=(QueuePrt)malloc(sizeof(struct QueuePrt));
    if(!s){
        return false;
    } 
    s->data=e;
    s->next=NULL;
    Q->rear->next=s;
    Q->rear=s;
    return true;
}

bool DeQueue(LinkQueue Q){
    QueuePrt p;
    if(Q->front==Q->rear)
        return false;
    p=Q->front->next;
    Q->front->next=p->next;
    if(Q->rear==p){  //若链表处头结点外剩下一个元素,需要rear指向头结点 
        Q->rear=Q->front;
    }
    free(p);

    return true;
}

 

 

 

 

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 数据结构(队列)

一个分享Java & Python知识的社区