zoukankan      html  css  js  c++  java
  • 队列的操作

    #include <stdio.h>
    #include <stdlib.h>
    
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -2
    
    typedef int QElemType;
    typedef int Status;
    
    /*
     * 存储结构
     */
    typedef struct QNode
    {
        QElemType data;
        struct QNode *next;
    }QNode, *QueuePtr;
    
    typedef struct
    {
        QueuePtr front;    //队头指针
        QueuePtr rear;    //队尾指针
    }LinkQueue;
    
    /*
     * 初始化队列
     */
    Status InitQueue(LinkQueue *Q)
    {
        Q->front = Q->rear = (QueuePtr) malloc(sizeof(QNode));
        if (!Q->front)
        {
            exit(OVERFLOW);
        }
        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)
    {
        DestroyQueue(Q);
        InitQueue(Q);
        return OK;
    }
    
    /*
     * 判断队列是否为空
     */
    Status IsEmpty(LinkQueue Q)
    {
        if (Q.front->next == NULL)
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        }
    }
    
    /*
     * 获取队列的长度
     */
    int GetLength(LinkQueue Q)
    {
        int i = 0;
        QueuePtr p = Q.front;
        while (Q.rear != p)
        {
            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));
        if (!p)
        {
            exit(OVERFLOW);
        }
        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;
    }
    
    /*
     * 访问元素
     */
    void visit(QElemType e)
    {
        printf("%d ", e);
    }
    
    /*
     * 遍历队列
     */
    Status TraverseQueue(LinkQueue Q, void (*visit)(QElemType))
    {
        QueuePtr p = Q.front->next;
        while (p)
        {
            visit(p->data);
            p = p->next;
        }
        return OK;
    }
    
    int main()
    {
        LinkQueue Q;
        if (InitQueue(&Q))
        {
            QElemType e;
            int i;
    
            printf("init_success
    ");
    
            if (IsEmpty(Q))
            {
                printf("queue is empty
    ");
            }
    
            for (i = 0; i < 10; i++)
            {
                EnQueue(&Q, i);
            }
    
            GetHead(Q, &e);
            printf("The first element is %d
    ", e);
    
            printf("length is %d
    ", GetLength(Q));
    
            DeQueue(&Q, &e);
            printf("delete element is %d
    ", e);
    
            TraverseQueue(Q, *visit);
    
            if (DestroyQueue(&Q))
            {
                printf("
    destroy_success
    ");
            }
        }
    }
  • 相关阅读:
    java.lang.NoSuchMethodError: org.springframework.beans.factory.annotation.InjectionMetadata.<init>(Ljava/lang/Class;)V
    tomcat下jndi的三种配置方式
    使用@RequestParam绑定请求参数到方法参数
    IE下easyui 缓存问题
    many to one could not resolve property
    aop郁闷错误
    Spring 运用 pointcut 和 advisor 对特定的方法进行切面编程
    放大改进版~
    cocos2d-x嵌入移动MM短代支付IAP2.4的SDK,点击支付崩溃的解决的方法
    在 Android* 商务应用中实施地图和地理围栏特性
  • 原文地址:https://www.cnblogs.com/kxzh/p/10919892.html
Copyright © 2011-2022 走看看