栈的定义:
栈的结构:
栈的实现:
#pragma once
#include <stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
typedef int STDataTYpe;
struct Stack
{
STDataType* a;
int top;
int capacity;
}ST;
void TestStack()
{
ST st;
StackInit(&st);
StackPush(&st,1);
StackPush(&st,2);
StackPush(&st,3);
StackPush(&st,4);
StackPop(&st);
StackPop(&st);
StackPop(&st);
StackPop(&st);
//printf("%d",StackTop(&st));
while(!StackEmpty(&st))
{
printf("%d",StackTop(&st));
StackPop(&st);
}
StackDestroy(&st);
}
void StackInit(ST* ps)
{
assert(ps);
ps->a=NULL;
ps->top=0; //ps->top=-1;
ps>capacity=0;
}
void StackDestroy(ST* ps)
{
assert(ps);
free(ps->a);
ps->a=NULL;
ps->capacity=ps->top=0;
}
void StackPush(ST* ps,STDataType x)
{
assert(ps);
if(ps->top==ps->capacity)
{
int newCapacity=ps->capacity==0?4:ps->capacity*2;
STdataType* tep=realloc(ps->a,sizeof(STDataType)*newCapacity);
if(tmp==NULL)
{
printf("realloc fail\n");
exit(-1);
}
ps->a=tmp;
ps->capacity=newCapacity;
}
ps->a[ps->top]=x;
ps->top++;
}
void StackPop(ST* ps)
{
assert(ps);
assert(ps->top>0);
ps->top--;
}
STDataType StackTop(ST* ps)
{
assert(ps);
assert(ps->top>0);//assert(!StackEmpty(ps));
return ps->a[ps->top-1];
}
int StackSize(ST* ps)
{
assert(ps);
return ps->top;
}
bool StackEmpty(ST* ps)
{
assert(ps);
return ps->top==0;
}
int main()
{
TestStack();
return 0;
}