文章目录
1何为栈
2出栈与入栈
栈 | 字义 |
---|---|
栈顶 | 进行数据的插入与删除的一端叫栈顶 |
栈尾 | 未进行数据的插入与删除的一端叫栈尾 |
压栈 | 栈的插入操作叫入栈/压栈/进栈 |
出栈 | 栈的删除(注意:栈的删除也是从顶部开始的) |
(最上面为栈顶)
进栈:
模拟实现栈
出栈:
<一直没审核完毕>
序号 | 模拟执行内容 |
---|---|
1 | 栈的初始化 |
2 | 入栈 |
3 | 出栈 |
4 | 获取栈顶元素 |
5 | 计数元素个数 |
6 | 检查栈是否为空 |
7 | 销毁栈 |
在进行代码我们先创建结构体
typedef int STDataType;
typedef struct stack
{
STDataType a;
int top;//栈顶间接性计数
int capacity;*
}stack;
- 1.//初始化
void Stack_Init(stack* pz)
{
assert(pz);
pz->a = NULL;
pz->capacity = 0;
pz->top = 0;
}
- 2.`//入栈
void Stack_Push(stack* ps, STDataType nb)
{
assert(ps);
if (ps->top == ps->capacity)
{
int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
ps->a=(STDataType*) realloc(ps->a,newcapacity*sizeof(STDataType));
if (ps->a == NULL)
{
printf(“realloc fail\n”);
exit(-1);
}
ps->capacity = newcapacity;
}
ps->a[ps->top] = nb;
ps->top++;
}`
-
3.//出栈
void Stack_Pop(stack* pz)
{
assert(pz);
assert(pz->top>0);
–pz->top;
} -
4.//获取栈顶元素
STDataType Stack_Top(stack* pz)
{
assert(pz);
assert(pz->top > 0);
return pz->a[pz->top-1];
} -
5.//获取的个数
int Stack_Size(stack* pz)
{
assert(pz);
return pz->top;
} -
6.//检查是否为空为空返回0不为空返回结果
bool Stack_Empty(stack* pz)
{
assert(pz);
/if (pz->top > 0)
{
return pz->top;
}
else
{
return 0;
}///top等于0为真
//不等于0为假
return pz->top == 0;
} -
7.//销毁
void Stack_Destroy(stack* pz)
{
assert(pz);
free(pz->a);
pz->a = NULL;
pz->capacity = 0;
pz->top = 0;
}
^ 0 ^
– 0 – 最终达到的效果如图.