zoukankan      html  css  js  c++  java
  • 链式队列 + 顺序队列 + 顺序循环队列

    #include <stdio.h>
    #include <stdlib.h>
    
    #define OK 1
    #define FALSE 0
    #define ERROR -1
    
    typedef int Status;
    typedef int QElemType;
    
    typedef struct QNode
    {
        QElemType data;
        QNode *next;
    }*QueuePtr;
    
    struct LinkQueue
    {
        QueuePtr front,rear;//队头,队尾指针
    };
    
    Status InitQueue(LinkQueue &Q)
    {
        Q.front->next = NULL;
        return OK;
    }
    
    Status DestroyQueue(LinkQueue &Q)
    {
        while(Q.front){
            Q.rear = Q.front->next;
            free(Q.front);
            Q.front = Q.rear;
        }
        return OK;
    }
    
    Status ClearQueue(LinkQueue &Q)
    {
        QueuePtr p,q;
        Q.rear = Q.front;
        p = Q.front->next;
        Q.front->next = NULL;
        while(p){
            q = p;
            p = p->next;
            free(q);
        }
        return OK;
    }
    
    Status QueueEmpty(LinkQueue Q){
        if(Q.front == Q.rear)
            return true;
        else
            return false;
    }
    
    int QueueLength(LinkQueue Q){
        int i = 0;
        QueuePtr p;
        p = Q.front;
        while(Q.rear != Q.front){
            i++;
            p = p->next;
        }
        return i;
    }
    
    Status GetHead(LinkQueue Q,QElemType &e){
        QueuePtr p;
        if(Q.front == Q.rear)
            return ERROR;
        p = Q.front->next;
        e = p->data;
        return OK;
    }
    
    Status EnQueue(LinkQueue &Q,QElemType e){
        QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
        p->data = e;
        p->next = NULL;
        Q.rear->next = p;
        Q.rear = p;
        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)
            Q.rear = Q.front;
        free(p);
        return OK;
    }
    
    Status QueueTraverse(LinkQueue Q,void(*vi)(QElemType))
    {
        QueuePtr p;
        p = Q.front->next;
        while(p){
            vi(p->data);
            p = p->next;
        }
    
        printf("
    ");
        return OK;
    }
    
    int main()
    {
        return 0;
    }

    顺序队列:

    //顺序队列
    #include <stdio.h>
    #include <stdlib.h>
    
    #define OK 1
    #define FALSE 0
    #define ERROR -1
    #define OVERFLOW -1
    #define MAXQSIZE 20 
    
    typedef int Status;
    typedef int QElemType;
    
    struct SqQueue
    {
        QElemType *base;
        int front;
        int rear;
    };
    
    Status InitQueue(SqQueue &Q){
        Q.base = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType));
        //
        Q.front = Q.rear = 0;
        return OK;
    }
    
    Status DestroyQueue(SqQueue &Q){
        if(Q.base)
            free(Q.base);
        Q.base = NULL;
        Q.front = Q.rear = 0;
        return 0;
    }
    
    Status ClearQueue(SqQueue &Q){
        Q.front = Q.rear = 0;
        return OK;
    }
    
    Status QueueEmpty(SqQueue Q){
        if(Q.front == Q.rear)
            return true;
        else
            return false;
    }
    
    int QueueLength(SqQueue Q){
        return (Q.rear - Q.front);
    }
    
    Status GetHead(SqQueue Q,QElemType &e){
        if(Q.front == Q.rear)
            return ERROR;
        e = *(Q.base + Q.front);
        return OK;
    }
    
    Status EnQueue(SqQueue &Q,QElemType e){
        if(Q.rear >= MAXQSIZE)
        {
            Q.base = (QElemType *)realloc(Q.base,(Q.rear + 1) * sizeof(QElemType));
            //
        }
        *(Q.base + Q.rear) = e;
        Q.rear++;
        return OK;
    }
    
    Status DeQueue(SqQueue &Q,QElemType e){
        if(Q.front == Q.rear)
            return ERROR;
        e = Q.base[Q.front];
        Q.front = (Q.front + 1);
        return OK;
    }
    
    Status QueueTraverse(SqQueue Q,void(*vi)(QElemType)){
        int i ;
        i = Q.front;
        while(i != Q.rear){
            vi(*(Q.base + i));
            i++;
        }
        printf("
    ");
        return OK;
    }

    顺序循环队列:

    //顺序循环队列
    #include <stdio.h>
    #include <stdlib.h>
    
    #define OK 1
    #define FALSE 0
    #define ERROR -1
    #define OVERFLOW -1
    #define MAXQSIZE 5 
    
    typedef int Status;
    typedef int QElemType;
    
    struct SqQueue
    {
        QElemType *base;
        int front;
        int rear;
    };
    
    Status InitQueue(SqQueue &Q){
        Q.base = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType));
        //
        Q.front = Q.rear = 0;
        return OK;
    }
    
    Status DestroyQueue(SqQueue &Q){
        if(Q.base)
            free(Q.base);
        Q.base = NULL;
        Q.front = Q.rear = 0;
        return 0;
    }
    
    Status ClearQueue(SqQueue &Q){
        Q.front = Q.rear = 0;
        return OK;
    }
    
    Status QueueEmpty(SqQueue Q){
        if(Q.front == Q.rear)
            return true;
        else
            return false;
    }
    
    int QueueLength(SqQueue Q){
        return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
    }
    
    Status GetHead(SqQueue Q,QElemType &e){
        if(Q.front == Q.rear)
            return ERROR;
        e = *(Q.base + Q.front);
        return OK;
    }
    
    Status EnQueue(SqQueue &Q,QElemType e){
        if((Q.rear + 1) % MAXQSIZE == Q.front) //队满
            return ERROR;
        Q.base[Q.rear] = e;
        Q.rear = (Q.rear + 1) % MAXQSIZE;
        return OK;
    }
    
    Status DeQueue(SqQueue &Q,QElemType e){
        if(Q.front == Q.rear)
            return ERROR;
        e = Q.base[Q.front];
        Q.front = (Q.front + 1) % MAXQSIZE;
        return OK;
    }
    
    Status QueueTraverse(SqQueue Q,void(*vi)(QElemType)){
        int i ;
        i = Q.front;
        while(i != Q.rear){
            vi(*(Q.base + i));
            i = (i + 1) % MAXQSIZE;
        }
        printf("
    ");
        return OK;
    }
  • 相关阅读:
    C# 代码中调用 Javascript 代码段以提高应用程序的配置灵活性(使用 Javascript .NET 与 Jint)
    非软件行业公司自建软件开发部门能力不强的原因分析
    编程经验点滴----巧妙解决 Oracle NClob 读写问题
    编程经验点滴----在 Oracle 数据库中保存空字符串
    这几天上海移动网络可以直接打开 Google Play 了
    品牌电脑硬盘损坏后,使用MediaCreationTool从微软官方下载正版Windows到USB做安装盘
    编程经验点滴----使用接口表保存可能并发的业务,然后顺序处理
    生产打印系统的一些汇总--商业合同方面
    生产打印系统的一些汇总--概要
    外观模式
  • 原文地址:https://www.cnblogs.com/chenyang920/p/5002503.html
Copyright © 2011-2022 走看看