顺序队列
SqQueue.h文件
#ifndef SQQUEUE_H
#define SQQUEUE_H
typedef unsigned int QElemType;
typedef struct
{
QElemType* base;
unsigned int Length;
unsigned int MaxSize;
}SqQueue;
void SqQueue_Init(SqQueue* Q, unsigned int size);
void SqQueue_Enter(SqQueue* Q, QElemType e);
void SqQueue_Traverse(SqQueue Q);
QElemType SqQueue_GetFront(SqQueue Q);
QElemType SqQueue_Delete(SqQueue* Q);
void SqQueue_Clear(SqQueue* Q);
void SqQueue_Destroy(SqQueue* Q);
void SqQueue_Test(void);
#endif
SqQueue.c文件
#include "SqQueue.h"
#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
static const unsigned int INCREMENT = 5;
void SqQueue_Init(SqQueue* Q, unsigned int size)
{
Q->Length = 0;
Q->MaxSize = size;
Q->base = calloc(sizeof(QElemType), Q->MaxSize);
}
void SqQueue_Enter(SqQueue* Q, QElemType e)
{
assert(Q->base != NULL);
Q->base[Q->Length] = e;
Q->Length += 1;
if (Q->Length == Q->MaxSize)
{
Q->MaxSize += INCREMENT;
QElemType* temp = realloc(Q->base, sizeof(QElemType) * Q->MaxSize);
if (temp != NULL)
{
Q->base = temp;
}
}
}
void SqQueue_Traverse(SqQueue Q)
{
assert(Q.Length != 0);
for (unsigned int i = 0; i < Q.Length; i++)
{
printf("%d ", Q.base[i]);
}
printf("\n");
}
QElemType SqQueue_GetFront(SqQueue Q)
{
assert(Q.Length != 0);
return Q.base[0];
}
QElemType SqQueue_Delete(SqQueue* Q)
{
assert(Q->Length != 0);
QElemType e = Q->base[0];
for (unsigned int i =0; i < Q->Length; i++)
{
Q->base[i] = Q->base[i + 1];
}
Q->Length -= 1;
return e;
}
void SqQueue_Clear(SqQueue* Q)
{
assert(Q->Length != 0);
for (unsigned int i = 0; i < Q->Length; i++)
{
Q->base[i] = 0;
}
Q->Length = 0;
}
void SqQueue_Destroy(SqQueue* Q)
{
assert(Q->base != NULL);
free(Q->base);
Q->base = NULL;
Q->Length = 0;
Q->MaxSize = 0;
}
void SqQueue_Test(void)
{
SqQueue Q;
SqQueue_Init(&Q, 3);
SqQueue_Enter(&Q, 1);
SqQueue_Enter(&Q, 2);
SqQueue_Enter(&Q, 3);
SqQueue_Enter(&Q, 4);
SqQueue_Enter(&Q, 5);
SqQueue_Traverse(Q);
SqQueue_Delete(&Q);
SqQueue_Delete(&Q);
SqQueue_Traverse(Q);
printf("%d\n", SqQueue_GetFront(Q));
SqList_Destroy(&Q);
printf("%p\n", Q.base);
}
测试:main.c文件
#include <stdio.h>
#include "SqQueue.h"
int main()
{
SqQueue_Test();
return 0;
}
测试结果