顺序栈
SqStack.h文件
#ifndef SQSTACK_H
#define SQSTACK_H
typedef unsigned int SElemType;
typedef struct
{
SElemType* base;
unsigned int Length;
unsigned int MaxSize;
}SqStack;
void SqStack_Init(SqStack* S, unsigned int size);
void SqStack_Push(SqStack* S, SElemType e);
void SqStack_Traverse(SqStack S);
SElemType SqStack_GetTop(SqStack S);
SElemType SqStack_Pop(SqStack* S);
void SqStack_Clear(SqStack* S);
void SqStack_Destroy(SqStack* S);
void SqStack_Test(void);
#endif
SqStack.c文件
#include "SqStack.h"
#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
static const unsigned int INCREMENT = 5;
void SqStack_Init(SqStack* S,unsigned int size)
{
S->Length = 0;
S->MaxSize = size;
S->base = calloc(sizeof(SElemType), S->MaxSize);
}
void SqStack_Push(SqStack* S, SElemType e)
{
assert(S->base != NULL);
S->base[S->Length] = e;
S->Length += 1;
if (S->Length == S->MaxSize)
{
S->MaxSize += INCREMENT;
SElemType * temp = realloc(S->base, sizeof(SElemType) * S->MaxSize);
if (temp != NULL)
{
S->base = temp;
}
}
}
void SqStack_Traverse(SqStack S)
{
assert(S.Length != 0);
for (unsigned int i = 0; i < S.Length; i++)
{
printf("%d ", S.base[i]);
}
printf("\n");
}
SElemType SqStack_GetTop(SqStack S)
{
assert(S.Length != 0);
return S.base[S.Length - 1];
}
SElemType SqStack_Pop(SqStack* S)
{
assert(S->Length != 0);
SElemType e;
S->Length -= 1;
e = S->base[S->Length];
S->base[S->Length] = 0;
return e;
}
void SqStack_Clear(SqStack* S)
{
assert(S->Length != 0);
for (unsigned int i = 0; i < S->Length; i++)
{
S->base[i] = 0;
}
S->Length = 0;
}
void SqStack_Destroy(SqStack* S)
{
assert(S->base != NULL);
free(S->base);
S->base = NULL;
S->Length = 0;
S->MaxSize = 0;
}
void SqStack_Test(void)
{
SqStack S;
SqStack_Init(&S, 4);
SqStack_Push(&S, 1);
SqStack_Push(&S, 2);
SqStack_Push(&S, 3);
SqStack_Push(&S, 4);
SqStack_Push(&S, 5);
SqStack_Traverse(S);
SqStack_Pop(&S);
SqStack_Traverse(S);
printf("%d\n", S.base[S.Length - 1]);
SqStack_Clear(&S);
printf("%d\n", S.base[2]);
SqStack_Destroy(&S);
printf("%p\n", S.base);
}
测试:main.c文件
#include <stdio.h>
#include "SqStack.h"
int main()
{
SqStack_Test();
return 0;
}
测试结果