1.stack.c模拟栈操作函数的实现
#include<stdio.h> #include<stdlib.h> static int sz=512; static char *stack;//数据栈 static int top=0;//栈指针 //用 static 修饰,作用延长变量生命周期,更重要一点防止其他文件对其值的修改 /* *初始化数据栈大小(申请动态内存记得释放掉) */ void init_stack(int size) { if(size==0) { size=sz; } else sz=size; stack=(char *)malloc(sz); } /* * *释放数据栈申请的内存空间 * */ void destory_stack(void) { free(stack); } /* *数据入栈时,如果内存不够,进行扩容 */ char push(char ch) { if(top==sz) { sz+=sz; stack=(char *)realloc(stack,sz);//扩容有两种情况,1内存空闲,直接扩容 //2数组后有数据,先拷贝元数据,然后进行扩容返回新的指针 } stack[top++]=ch; } /* *数据出栈 */ char pop(void) { return stack[--top]; } /* * *数据出栈完毕 */ int is_empty(void) { return top==0; } /* *数据入栈完毕 */ int is_full(void) { return top=sz; }
2.stack.h 头文件的包含
/* *对stack.c中的文件进行链接,申明 */ /* *初始化数据栈大小 */ extern void init_stack(int size); /* *销毁空间,防止内存泄漏 */ extern void destory_stack(void); /* *数据入栈,及扩容 */ extern char push(char ch); /* *数据出栈 */ extern char pop(void); extern int is_empty(void); extern int is_full(void);
3.main.c效果演示
#include<stdio.h> #include<stdlib.h> #include "stack.h"; /* *模拟栈操作 */ int main(int argc,char **argv) { char str[20]="helloworld"; char *p=str; /*while(1) { *p=getchar(); if(*p++=='\n') { printf("请输入*结束\n"); while(getchar()!='*') *p='*'; p=str; break; } }*/ init_stack(3); /*while(*p!='*')*/ while(*p!='\0') { push(*p++); } printf("出栈结果:\n"); while(!is_empty()) { putchar(pop()); } destory_stack(); system("pause"); return 0; }
4.结果演示