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);
    }
  • 相关阅读:
    在公司中使用springboot技术的经验
    使用swagger2代替api文档
    第一份正式工作-华为外包。
    zookeeper学习入门
    dubbo入门
    C/C++编程笔记:inline函数的总结!C/C++新手值得收藏!
    刚毕业入职程序员?程序员需注意这 6 点!都是前辈“血的教训”
    你在群里提的技术问题没人回答!是为什么?因为没注意这 4 点!
    程序人生:程序员想要提升英文阅读能力怎么办?实用秘籍推荐!
    程序员必看:长期工作的程序员转眼变油腻大叔!你今天护肤了吗?
  • 原文地址:https://www.cnblogs.com/Crel-Devi/p/9601024.html
Copyright © 2011-2022 走看看