1何为栈
2出栈与入栈
栈 | 字义 |
---|
栈顶 | 进行数据的插入与删除的一端叫栈顶 | 栈尾 | 未进行数据的插入与删除的一端叫栈尾 | 压栈 | 栈的插入操作叫入栈/压栈/进栈 | 出栈 | 栈的删除(注意:栈的删除也是从顶部开始的) |
(最上面为栈顶)
进栈:
出栈:
<一直没审核完毕>
-
接下来我们通过代码模拟实现栈 -.- 模拟 ^0^
序号 | 模拟执行内容 |
---|
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;
}
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 – 最终达到的效果如图.
总结:
—今天用的编辑器不习惯然后那个视频自己刚刚会弄不太熟练,不是特别好看,所以大家希望别建议,我会慢慢的提高自己。 — 栈的学习感觉比链表会更抽象的感觉。 — 变强的路很累。 — 让我们大家一起进步吧。
|