利用brk和sbrk实现栈
由于brk是调整末尾指针的位置,sbrk是位移末尾指针的位置,导致栈的代码异常简洁。
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<unistd.h>
#define TYPE int
void *p=NULL;
void destory_stark(void)//销毁栈
{
brk(p);//让末尾指针回到初始值
}
bool empty_stark(void)//判断栈空
{
return p==sbrk(0);//若末尾指针等于初始值则栈空
}
void push_stark(TYPE data)//压栈
{
*(TYPE *)sbrk(sizeof(TYPE))=data;//开辟TYPE类型的空间,把数据放进去
}
TYPE top_stark(void)//栈顶
{
return *((TYPE *)sbrk(0)-1);//把当前位置的栈顶拿出去
}
void pop_stark(void)//弹栈
{
sbrk(-(sizeof(TYPE)));//把末尾指针向前走TYPE字节
}
TYPE count_stark(void)//计数
{
return (sbrk(0)-p)/sizeof(TYPE);//把末尾指针与初始指针相减再除以TYPE类型的字节数就等于数量
}
int main()
{
p=sbrk(0);
for(int i=0;i<10;i++)
{
push_stark(i);
printf("top:%d\n",top_stark());
}
printf("-------------------\n");
for(int i=0;i<10;i++)
{
printf("top:%d\n",top_stark());
pop_stark();
}
}