利用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(); } }