数据结构-队列

//队列 是只允许在一端进行插入操作,另一端删除操作 先进先出
//队头删除,队尾插入 
//循环队列 队列的头尾相接的顺序存储结构 
 //队列的顺序存储 
 /*
 队列满:(rear+1)%QueueSize==front 
 队列长度: (rear-front+QueueSize)%QueueSize 
 */ 
#include<stdio.h>
#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int QElemType;
typedef struct {
    QElemType data[MAXSIZE];
    int front;//头指针 
    int rear;//尾指针,若队列不为空,指向对位元素的下一个位置 
}SqQueue;
/*初始化一个空队列*/
Status InitQueue(SqQueue *Q){
    Q->front=0;
    Q->rear=0;
    return OK;
} 
//返回Q的元素个数
int QueueLength(SqQueue Q){
    return (Q.rear-Q.front+MAXSIZE)%MAXSIZE; 
} 
/*若队列未满,插入元素e为Q的新的队尾元素*/
Status EnQueue(SqQueue *Q,QElemType e){
    if((Q->rear+1)%MAXSIZE==Q->front){
        return ERROR; 
    }//判断队满 
    Q->data[Q->rear]=e;
    Q->rear=(Q->rear+1)%MAXSIZE; 
    return OK;
} 
//删除队头元素
Status DelQueue(SqQueue *Q,QElemType *e){
    if(Q->rear==Q->front){
        return ERROR;
    } //判断队列是否为空 
    *e=Q->data[Q->front];
    Q->front=(Q->front+1)%MAXSIZE;
    return OK; 
} 

---------------------------队列的链式存储

//队列的链式存储结构及实现 
#include<stdio.h>
#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW 0
typedef int Status;
typedef int QElemType;
typedef struct QNode {
    QElemType data;
    struct QNode *next;
}QNode,*QueuePtr;
typedef struct {
    QueuePtr front,rear;
}LinkQueue;
//入队操作
Status EnQueue (LinkQueue *Q,QElemType e){
    QueuePtr s=(QueuePtr)malloc (sizeof(QNode));
    if(!s){
        exit(OVERFLOW);
    }
    s->data=e;
    s->next=NULL;
    Q->rear->next=s;
    Q->rear=s;
    return OK;
} 
//出队操作
Status DeQueue (LinkQueue *Q,QElemType *e){
    QueuePtr p;
    if(Q->front==Q->rear){
        return ERROR;
    }
    p=Q->front->next;
    *e=p->data;
    Q->front->next=p->next;
    if(Q->rear==p){//如果删除的是队尾,将删除后的rear指向头结点 
        Q->rear=Q->front; 
    }
    free(p);
    return OK;
     
}

 

上一篇:队列的C++数组实现方法(队列--数据结构)


下一篇:queque多线程利器(队列)