• 顺序队与链队的实现


    一、队列的基本概念

    队列简称队,也是一种运算受限的线性表,其限制仅允许在表的一端进行插入,而在表的另一端进行删除,通常把进行插入的一端称为队尾(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
    ",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;    
    }
  • 相关阅读:
    使用RestTemplate上传文件到远程接口
    设计模式(五)之适配器模式
    设计模式(四)之装饰者模式
    设计模式(三)之模板方法模式
    设计模式(二)之责任链模式
    BUG-jQuery提交表单submit方法-TypeError: e[h] is not a function
    数据类型--集合 set
    数据类型--字典 dic
    字符 str 串需要记住的语法
    数据类型--列表 list
  • 原文地址:https://www.cnblogs.com/hekuiFlye/p/9559859.html
Copyright © 2020-2023  润新知