centos 网站搭建,中国互联网协会调解中心,住房城乡建设部网站,教育类网站前置审批前言 栈是一种特殊的线性表#xff0c;只允许在固定的一端进行插入和删除的操作#xff0c;进行数据插入和删除的一端叫做栈顶#xff0c;另一端叫做栈底。 栈中的数据元素遵循后进先出的的原则。
目录
1.压栈和出栈
2. 栈的实现
3.测试代码 1.压栈和出栈 压栈#xff…前言 栈是一种特殊的线性表只允许在固定的一端进行插入和删除的操作进行数据插入和删除的一端叫做栈顶另一端叫做栈底。 栈中的数据元素遵循后进先出的的原则。
目录
1.压栈和出栈
2. 栈的实现
3.测试代码 1.压栈和出栈 压栈栈的插入操作叫 压栈入数据在栈顶。 弹栈栈的删除操作叫做出栈。出数据也在栈顶。 如图 2. 栈的实现 //stack.h
#includestdlib.h
#includeassert.h
#includestdio.h
#includestdbool.h
typedef int SDataType;
typedef struct Stack
{SDataType* _a;int _top;//栈顶数据int _capacity;//容量
}Stack;
void StackInit(Stack* st);//初始化栈
void StackDestory(Stack* st);//销毁栈
void StackPush(Stack* st, SDataType data);//入栈
void StackPop(Stack* st);//出栈size_t StackSize(Stack* st);//获取栈中元素的数目SDataType StackTop(Stack* st);//获取栈顶元素bool StackEmpty(Stack* st);//判断栈是否为空//stack.c
void StackInit(Stack* st)//初始化栈
{st-_a (SDataType*)malloc(sizeof(SDataType) * 4);//申请空间//初始化数据st-_capacity 4;st-_top 0;
}
void StackDestory(Stack* st)//销毁栈
{free(st-_a);//释放空间st-_capacity st-_top 0;
}
void StackPush(Stack* st, SDataType data)//入栈
{assert(st);//判断指针是否存在if (st-_capacity st-_top){//空间满了需要增容st-_capacity * 2;SDataType* p (SDataType *)realloc(st-_a, st-_capacity * sizeof(SDataType));if (p NULL){printf(内存不足\n);exit(-1);}st-_a p;}st-_a[st-_top] data;(st-_top);
}
void StackPop(Stack* st)//出栈
{assert(st);//确保指针存在assert(st-_top 0);--(st-_top);
}
size_t StackSize(Stack* st)//获取栈中元素的数目
{assert(st);//确保指针存在size_t size 0;return size st-_top;
}
SDataType StackTop(Stack* st)//获取栈顶元素
{return st-_a[(st-_top) -1 ];
}
bool StackEmpty(Stack* st)//判断栈是否为空
{return !st-_top;
}
3.测试代码
void TestStack()
{Stack st;StackInit(st);StackPush(st, 1);StackPush(st, 2);StackPush(st, 3);StackPush(st, 4);StackPush(st, 5);StackPush(st, 6);StackPush(st, 7);StackPush(st, 8);while (!StackEmpty(st)){printf(%d , StackTop(st));StackPop(st);}StackDestory(st);
}