何大土  

一、队列的基本概念

队列简称队,也是一种运算受限的线性表,其限制仅允许在表的一端进行插入,而在表的另一端进行删除,通常把进行插入的一端称为队尾(rear),进行删除的一端称作队首或对头(front)。

队列的主要特点是“先进先出”。

基本运算:

    init(&q):初始化队列,构造一个空的队列q。

    isEmpty(q):判断队列是否为空。

    enQueue(&q,e):入队操作,将元素e作为队尾元素。

    deQueue(&q,&e):出队运算,从队列中出队一个元素,赋值给e。

二、代码实现

1.顺序队

#include<stdio.h>
#define MAXSIZE 50
typedef int elemType;
typedef struct{
    elemType data[MAXSIZE];
    int front,rear;
}SqQueue;

void init(SqQueue &q){
    q.front=q.rear=0;
}

bool isEmpty(SqQueue q){
    return (q.front==q.rear);
}

int enQueue(SqQueue &q,elemType e){
    if((q.rear+1)%MAXSIZE==q.front)
        return 0;
    q.rear=(q.rear+1)%MAXSIZE;
    q.data[q.rear]=e;
    return 1;
}

int deQueue(SqQueue &q,elemType &e){
    if(q.front==q.rear)
        return 0;
    q.front=(q.front+1)%MAXSIZE;
    e=q.data[q.front];
    return 1;
}


int main(){
    SqQueue q;
    init(q);
    for(int i=1;i<=5;i++){
        enQueue(q,i);
    }
    int x;
    while(!isEmpty(q)){
        deQueue(q,x);
        printf("%d\n",x);
    }
    return 0;
}

 2.链队

#include<stdio.h>
#include<stdlib.h>

typedef int elemType;

typedef struct qnode{
    elemType data;
    struct qnode *next;
}qnode;

typedef struct {
    qnode *front;
    qnode *rear;
}LiQueue;

void init(LiQueue *&q){
    q = (LiQueue*)malloc(sizeof(LiQueue));
    q->front=q->rear=NULL;
}

int isEmpty(LiQueue *q){
    return q->rear==NULL;
}

int enQueue(LiQueue *&q,elemType e){
    qnode *node = (qnode*)malloc(sizeof(qnode)); 
    node->data=e;
    node->next=NULL;
    if(q->rear==NULL){
        q->rear=q->front=node;
    }else{
        q->rear->next=node;
        q->rear=node;
    }
    return 1;
}

int deQueue(LiQueue *&q,elemType &e){
    if(q->front==NULL)
        return 0;
    qnode *node = q->front;
    e = node->data;
    if(q->front==q->rear)
        q->front=q->rear=NULL;
    else
        q->front=q->front->next;
    free(node);
    return 1;
}

int main(){
    LiQueue *q;
    init(q);
    for(int i=1;i<6;i++)
        enQueue(q,i);
        
    int x;
    for(int j=1;j<6;j++){
        deQueue(q,x);
        printf("%d ",x);
    }
        
    return 0;    
}

 

posted on 2018-08-30 14:14  何大土  阅读(1022)  评论(0编辑  收藏  举报