MyQueue.cpp
#include <stdio.h>
#include "MyQueue.h"
#include <corecrt_malloc.h>
#include <cassert>
Node* CreateNode(int data)
{
Node* thisNode = (Node*)malloc(sizeof(Node));
thisNode->m_data = data;
thisNode->m_next = NULL;
return thisNode;
}
void Init(Queue* myQueue)
{
myQueue->m_begin = myQueue->m_end = NULL;
}
void Push(Queue* myQueue,int data)
{
if (!myQueue->m_begin)
{
myQueue->m_begin = myQueue->m_end = CreateNode(data);
}
else
{
myQueue->m_end->m_next = CreateNode(data);
myQueue->m_end = myQueue->m_end->m_next;
}
}
void Pop(Queue* myQueue)
{
if (myQueue->m_begin)
{
Node* tmp = myQueue->m_begin;
myQueue->m_begin = myQueue->m_begin->m_next;
free(tmp);
if (myQueue->m_begin == NULL)
{
myQueue->m_end = NULL;
}
}
}
int Front(Queue* myQueue)
{
if (myQueue->m_begin)
{
return myQueue->m_begin->m_data;
}
else
{
return -1;
}
}
int Size(Queue* myQueue)
{
Node* head = myQueue->m_begin;
int cnt = 0;
while (head)
{
head = head->m_next;
cnt++;
}
return cnt;
}
int isEmpty(Queue* myQueue)
{
return myQueue->m_begin ? 1 : 0;
}
int main()
{
Queue* myQueue = New_Queue();
myQueue->Init(myQueue);
for (int i = 0; i < 10; i++)
{
myQueue->Push(myQueue,i);
}
printf("%d\n", myQueue->Size(myQueue));
for (int i = 0; i < 11; i++)
{
if (myQueue->isEmpty(myQueue))
{
printf("%d,", myQueue->Front(myQueue));
}
else
{
printf("*,", myQueue->Front(myQueue));
}
myQueue->Pop(myQueue);
}
printf("\n");
printf("%d", Front(myQueue));
}
Queue* New_Queue()
{
Queue* myQueue = (Queue*)malloc(sizeof(Queue));
myQueue->Init = Init;
myQueue->CreateNode = CreateNode;
myQueue->Pop = Pop;
myQueue->Front = Front;
myQueue->Size = Size;
myQueue->isEmpty = isEmpty;
myQueue->Push = Push;
return myQueue;
}
MyQueue.h
#pragma once
typedef struct Node
{
int m_data;
Node* m_next;
}Node;
typedef struct Queue
{
Node* m_begin;
Node* m_end;
Node* (*CreateNode)(int data);
void (*Init)(Queue* myQueue);
void (*Pop)(Queue* myQueue);
int (*Front)(Queue* myQueue);
int (*Size)(Queue* myQueue);
int (*isEmpty)(Queue* myQueue);
void (*Push)(Queue* myQueue, int data);
}Queue;
Queue* New_Queue();
效果图