c语言学习,模拟栈操作

时间:2021-01-29 07:39:09
1.stack.c模拟栈操作函数的实现

#include<stdio.h>
#include<stdlib.h> static int sz=; static char *stack;//数据栈 static int top=;//栈指针
//用 static 修饰,作用延长变量生命周期,更重要一点防止其他文件对其值的修改 /*
*初始化数据栈大小(申请动态内存记得释放掉)
*/
void init_stack(int size)
{
if(size==)
{
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==;
} /*
*数据入栈完毕
*/
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[]="helloworld";
char *p=str; /*while(1)
{
*p=getchar();
if(*p++=='\n')
{
printf("请输入*结束\n");
while(getchar()!='*')
*p='*';
p=str;
break;
}
}*/ init_stack(); /*while(*p!='*')*/
while(*p!='\0')
{
push(*p++);
} printf("出栈结果:\n"); while(!is_empty())
{
putchar(pop());
}
destory_stack();
system("pause");
return ;
}

4.结果演示
 c语言学习,模拟栈操作c语言学习,模拟栈操作c语言学习,模拟栈操作