zoukankan      html  css  js  c++  java
  • 队列————链表实现

    队列的链表实现

    Queue.h:

    #ifndef QUEUE_H
    #define QUEUE_H
    
    typedef char ElementType;
    
    struct Node;//队列节点的结构体
    typedef struct Node *PtrToNode;
    
    struct PtrsToList;//指向队列节点的结构体
    typedef struct PtrsToList *Queue;
    
    int IsEmpty(Queue Q);
    Queue CreatQueue();
    void MakeEmpty(Queue Q);
    void Enqueue(Queue Q, ElementType X);
    void Dequeue(Queue Q);
    ElementType Front(Queue Q);
    ElementType FrontAndDequeue(Queue Q);
    void PrintQueue(Queue Q);
    
    #endif

    LinkedQueue.c:

    #include"Queue.h"
    #include<stdio.h>
    #include<stdlib.h>
    
    struct Node{
        ElementType Element;
        PtrToNode Next;
    };
    
    struct PtrsToList{
        PtrToNode Rear;
        PtrToNode Front;
    };
    
    int IsEmpty(Queue Q)
    {
        return Q->Front == NULL;//Q->Rear == NULL;
    }
    
    Queue CreatQueue()
    {
        Queue Q;
        Q = (Queue)malloc(sizeof(struct PtrsToList));
        if(Q == NULL)
            printf("Malloc failure!");
        else
        {
            Q->Rear = Q->Front = NULL;
            MakeEmpty(Q);
        }
        return Q;
    }
    
    void MakeEmpty(Queue Q)
    {
        if(Q == NULL)
            printf("Please creatqueue first!");
        else
        {
            while(!IsEmpty(Q))
                Dequeue(Q);
        }
    }
    
    void DiseposeQueue(Queue Q)
    {
        PtrToNode P, Tmp;
        P = Q->Front;
        while(P != NULL)
        {
            Tmp = P->Next;
            free(P);
            P = Tmp;
        }
        Q->Front = Q->Rear = NULL;
        free(Q);
    }
    
    void Enqueue(Queue Q, ElementType X)
    {
        PtrToNode TmpNode;
        TmpNode = (PtrToNode)malloc(sizeof(struct Node));
        if(TmpNode == NULL)
            printf("Malloc failure!");
        else
        {
            TmpNode->Element = X;
            TmpNode->Next = NULL;
            if(IsEmpty(Q))//进队的是第一个元素
            {
                Q->Front = TmpNode;
                Q->Rear = TmpNode;
            }
            else
            {
                Q->Rear->Next = TmpNode;
                Q->Rear = TmpNode;
            }
        }
        //Q = NULL;用来测试Q其实是传来指针的副本
    }
    
    void Dequeue(Queue Q)
    {
        PtrToNode FrontNode;
        if(!IsEmpty(Q))
        {
            FrontNode = Q->Front;
            if(Q->Front == Q->Rear)//只有一个元素在队中
                Q->Front = Q->Rear = NULL;
            else
                Q->Front = Q->Front->Next;
            free(FrontNode);
        }
    }
    
    ElementType Front(Queue Q)
    {
        if(!IsEmpty)
            return Q->Front->Element;
        printf("Queue is empty!");
        return 0;
    }
    
    ElementType FrontAndDequeue(Queue Q)
    {
        PtrToNode FrontCell;
        ElementType FrontElement;
        if(!IsEmpty(Q))
        {
            FrontCell = Q->Front;
            if(Q->Front == Q->Rear)
                Q->Front = Q->Rear = NULL;
            else
                Q->Front = Q->Front->Next;
            FrontElement = FrontCell->Element;
            free(FrontCell);
        }
        return FrontElement;
    }
    void PrintQueue(Queue Q)
    {
        PtrToNode Pt;
        Pt = Q->Front;
        while(Pt->Next != NULL)
        {
            printf("%c-", Pt->Element);
            Pt = Pt->Next;
        }
        printf("%c
    ", Pt->Element);
    }
  • 相关阅读:
    虚拟机CentOS 7 网络连接显示"线缆被拔出"
    sqlplus下删除退格,出现^H^H
    “服务器发送了一个意外的数据包。received:3,expected:20“问题的解决方法
    Oracle 12c创建PDB用户并设置默认表空间
    今日进度
    今日进度
    给王老师的建议
    今日进度
    今日进度
    每周总结
  • 原文地址:https://www.cnblogs.com/Crel-Devi/p/9601024.html
Copyright © 2011-2022 走看看