#include <cstdio>
#include <cstdlib>
#define Incrise_Size 10
typedef struct stack
{
int* top;
int* base;
int MaxSize;
}sqStack;
void CreatStack(sqStack*Stack,int Size)
{
Stack->base=(int *)malloc(Size*(sizeof(int)));
if(!Stack->base)
{
printf("内存分配失败!\n");
exit(1);
}
Stack->MaxSize=Size;
Stack->top=Stack->base;
}
void Push(sqStack* Stack,int x)
{
if((Stack->top-Stack->base)==Stack->MaxSize)
{
Stack->base=(int*)realloc(Stack->base,(Stack->MaxSize+Incrise_Size)*sizeof(int));
Stack->MaxSize+=Incrise_Size;
if(!Stack->base)
{
printf("内存分配失败!\n");
exit(1);
}
}
*(Stack->top)=x;
Stack->top++;
}
void Pop(sqStack* s,int* n)
{
if(s->top==s->base)
{
printf("这是一个空栈!\n");
exit(1);
}
*n=*--(s->top);
}
int StackLength(sqStack* s)
{
return (s->top-s->base);
}
void ClearStack(sqStack* s)
{
s->top=s->base;
}
void DestoryStack(sqStack* s)
{
free(s->base);
printf("栈已经被销毁!\n");
}
void Printf(sqStack* s)
{
int i,l=StackLength(s);
for(i=1;i<=l;i++)
printf("%d ",*--(s->top));
printf("\n");
}
void main()
{
int i,n=0;
sqStack s;
CreatStack(&s,6);
for(i=1;i<=3;i++)
Push(&s,i);
printf("length=%d\n",StackLength(&s));
//Printf(&s);
/*for(i=1;i<=3;i++)
{
Pop(&s,&n);
printf("n=%d ",n);
printf("\n");
}
*/
//ClearStack(&s);
DestoryStack(&s);
}
数据结构栈的C语言实现
最新推荐文章于 2022-05-05 18:50:57 发布