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# 如何比较版本号大小
    C#中复制文件夹及文件的两种方法
    C#解压和压缩文件
    C# NPOI 导入与导出Excel文档 兼容xlsx, xls
    c#使用NPOI导出到excel
    C# 把DataGridView控件数据,转成DataTable
    C# 如何为 datagridview 中增加checkbox列
    Mixed Content: The page at 'xxx' was loaded over HTTPS, but requested an insecure resource 'xxx'.
    c# Winform DataGridView 当前单元格失去焦点的有关问题
    Docker的通俗解释
  • 原文地址:https://www.cnblogs.com/chenyang920/p/5002503.html
Copyright © 2011-2022 走看看