队列的链式存储

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef int ElemType;
typedef struct QNODE{
    ElemType data;
    struct QNODE* next;
}QueueNode,*QueueNodePtr;

typedef struct QLIST{
    QueueNodePtr font;
    QueueNodePtr rear;
    int count;
}ListQueue,*ListQueuePtr;

ListQueuePtr InitQueue();//初始化队列

void InsertQueue(ListQueuePtr s,ElemType e);//插入元素

void GetHead(ListQueuePtr s,ElemType* e);//得到对头元素;

bool QueueEmpty(ListQueuePtr s);//判断对列是否为空

int     QueueLength(ListQueuePtr s);//得到队列的长度

void QueueFree(ListQueuePtr s);//释放队列

void QueuePrint(ListQueuePtr s);//打印队列

void DeQueue(ListQueuePtr s, ElemType* e);//删除对头元素,并将其赋值给e

int main()
{
    int a;
    ListQueuePtr s = InitQueue();
    for (int i = 0; i < 10; i++)
    {
        InsertQueue(s,i);
    }

    QueuePrint(s);
    printf("%d  ", QueueLength(s));
    GetHead(s, &a);
    printf("%d  ", a);
    DeQueue(s, &a);
    printf("%d  ", a);
    QueuePrint(s);
    for (int i = 0; i < 9; i++)
    {
        DeQueue(s, &a);
    }
    printf("%d  ", a);
    QueuePrint(s);
    QueueFree(s);
    system("pause");
    return 0;

}

ListQueuePtr InitQueue()
{
    ListQueuePtr s = (ListQueuePtr)malloc(sizeof(ListQueue));
    s->font = s->rear = (QueueNodePtr)malloc(sizeof(QueueNode));
    s->rear->next = NULL;
    s->count = 0;
    return s;

}

void InsertQueue(ListQueuePtr s, ElemType e)
{
    
    if (s == NULL)
    {
        return;
    }
    QueueNodePtr NewNode = (QueueNodePtr)malloc(sizeof(QueueNode));
    NewNode->data = e;
    NewNode->next = NULL;
    s->rear->next = NewNode;
    s->rear = NewNode;
    s->count++;
}

void GetHead(ListQueuePtr s, ElemType* e)
{
    *e = s->font->next->data;
}

bool QueueEmpty(ListQueuePtr s)
{
    if (s->count == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

int     QueueLength(ListQueuePtr s)
{
    return s->count;
}

void QueueFree(ListQueuePtr s)
{
    QueueNodePtr TempNode = s->font->next;
    
    while (s->count)
    {
        QueueNodePtr FreeNode = TempNode;
        TempNode = TempNode->next;
        free(FreeNode);
        s->count--;
    }
    
}

void Print(int e)
{
    printf("%d", e);
}

void QueuePrint(ListQueuePtr s)
{
    QueueNodePtr TempNode = s->font->next;
    while (TempNode != NULL)
    {
        printf("%d  ",TempNode->data);
        TempNode = TempNode->next;
    }
}

void DeQueue(ListQueuePtr s, ElemType* e)
{
    if (s->font == s->rear)
    {
        return;
    }
    *e = s->font->next->data;
    s->font = s->font->next;
    s->count--;
}

猜你喜欢

转载自blog.csdn.net/qq_40729286/article/details/82889484
今日推荐