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 -1
    
    typedef struct QNode
    {
        int data;
        struct QNode *next;
    }QNode, *QueuePtr;
    
    typedef struct 
    {
        QueuePtr front, rear;
    }LinkQueue;
    
    int InitQueue(LinkQueue &Q)
    {
       Q.front = Q.rear = (QNode *)malloc(sizeof(QNode));
       if(!Q.front)exit(OVERFLOW);
       Q.front->next = NULL;
       return OK;
    }//队列初始化
    
    int DestroyQueue(LinkQueue &Q)
    {
        while(Q.front)
        {
            Q.rear = Q.front->next;
            free(Q.front);
            Q.front = Q.rear;
        }
        return OK;
    }//销毁队列
    
    int ClearQueue(LinkQueue &Q)
    {
        QNode *p = Q.front -> next;
        while(p)
        {
            p = p->next;
            free(Q.front->next);
            Q.front->next = p;
        }
        Q.rear = Q.front;
        return OK;
    }//清空队列
    
    int QueueEmpty(LinkQueue Q)
    {
        if(Q.front == Q.rear)
            return TRUE;
        return FALSE;
    }
    
    int QueueLength(LinkQueue Q)
    {
        if(Q.front == Q.rear)
            return 0;
        int j = 0;
        QNode *p = Q.front->next;
        while(p)
        {
            p = p->next;
            j++;
        }
        return j;
    }//求队长
    
    int GetHead(LinkQueue Q, int e)
    {
        if(Q.front == Q.rear)
            return ERROR;
        e = Q.front->next->data;
        return  OK;
    }//取队头元素
    
    int EnQueue(LinkQueue &Q, int e)
    {
    
        QNode *p = (QNode *)malloc(sizeof(QNode));
        if(!p)
            exit(OVERFLOW);
        p->data = e;
        p->next = NULL;
        Q.rear->next = p;
        Q.rear = p;
        return OK;
    }//入队
    
    int DeQueue(LinkQueue &Q, int &e)
    {
        if(Q.front == Q.rear)
            return ERROR;
        QNode *p = Q.front->next;
        e = p->data;
        Q.front->next = p->next;
        if(Q.rear == p)
            Q.rear = Q.front;
        free(p);
        return OK;
    }//出队
    
    int QueueTraves(LinkQueue Q, void (*visit)(QNode node))
    {
        if(Q.front == Q.rear)
        {
            printf("
    队列为空
    ");
            return ERROR;
        }
        QNode *p = Q.front->next;
        printf("
    队列中的元素是:");
        while(p)
        {
            visit(*p);
            p = p->next;
        }
        return OK;
    }//遍历队列
    
    void PrintNode(QNode node)
    {
        printf("%d ", node.data);
    }//打印node数据
    
    
    void PrintMenu()
    {
        printf("
          链队列基本操作        
    ");
        printf("
        -------------------     
    ");
        printf("
    *      1-入队              *
    ");
        printf("
    *      2-出队              *
    ");
        printf("
    *      3-遍历              *
    ");
        printf("
    *      4-清空队列          *
    ");
        printf("
    *      5-求队列长度        *
    ");
        printf("
    *      6-取队头元素        *
    ");
        printf("
    *      0-退出        *
    ");
        printf("
        -------------------     
    ");
        printf("请选择菜单号(0-6):");
        
    }
    int main()
    {
        LinkQueue Q;
        InitQueue(Q);
        int e, z = 1, cdh;
        while(z)
        {
            do
            {
                PrintMenu();
                scanf("%d", &cdh);
                if(cdh < 0 || cdh > 6)
                       printf("菜单号输入错误,请重新输入!
    ");
            }while(cdh < 0 || cdh > 6);
            switch(cdh)
                {
                    case 0:
                        z = 0; break;
                    case 1://入队
                        printf("请输入入队元素:");
                        scanf("%d", &e);
                        if(EnQueue(Q, e))
                                printf("
    元素%d入队成功!
    ",e);
                        else
                            printf("
    元素%d入队失败!
    ",e);
                        break;
                    case 2://出队
                        if(DeQueue(Q, e))
                                printf("
    出队成功!出队元素是%d
    ",e);
                        else
                            printf("
    出队失败!
    ");
                        break;
                    case 3://遍历
                        QueueTraves(Q, PrintNode);
                        putchar('
    ');
                        break;
                     case 4://清空队列
                         if(ClearQueue(Q))
                                 printf("
    清空队列成功!
    ");
                         else
                             printf("
    清空队列失败!
    ");
                         break;
                     case 5 ://求队长
                         printf("
    队列长度是:%d
    ",QueueLength(Q));
                         break;
                     case 6 ://取队头元素
                         if(GetHead(Q, e))
                             printf("队头元素是:%d
    ",e);
                         else
                             printf("取队头元素失败!
    ");
                         break;
                }
        }
        return 0;
    }
  • 相关阅读:
    HNU 12906 Battleship
    codeforces 261 D
    HDU 4939 Stupid Tower Defense(dp)
    HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007
    HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)
    【转载】使用Pandas对数据进行筛选和排序
    【转载】使用pandas进行数据清洗
    【转载】VC维的来龙去脉
    Python-时间操作
    Pandas-数据导入
  • 原文地址:https://www.cnblogs.com/qq2424260747/p/4923411.html
Copyright © 2011-2022 走看看