C语言模拟栈

头文件:

#include<stdlib.h>
#include<stdio.h>
#include<memory.h>

#define N 100

struct stack
{
	int a[N];
	int top;	//标识栈顶

};
//起别名
typedef struct stack Stack;

//因为有副本机制,所以这儿使用地址。
void init(Stack *p);		//初始化栈
int isempty(Stack *p);		//判断栈是否为空
int isfull(Stack *p);		//判断栈是否满
int gettop(Stack *p);		//获取栈顶
void push(Stack *p,int key);		//进栈
void pop(Stack *p);			//出栈
void show(Stack *p);	//显示栈的所有数据

stack.c  main函数:


#include"stack.h"


//栈的初始化
void init(Stack *p)
{
	p->top = -1;	//-1代表为空
	//第一个数组的地址,第二个要复制的数据,第三个数据的大小
	memset(p->a, 0, sizeof(int)*N);	//初始化数组的大小,并全部初始化为 0

}
//判断栈是否为空
int isempty(Stack *p)
{
	if (p->top == -1)
	{
		return 1; //为空
	}
	else
	{
		return 0;	//不为空
	}
}
// 判断栈是否满
int isfull(Stack *p)
{
	if (p->top == N-1)
	{
		return 1;	//溢出
	}
	else
	{
		return 0;	//没有溢出
	}
}
//得到栈顶的值
int gettop(Stack *p)
{
	return p->a[p->top];
}
//进栈,key 为进栈的值
void push(Stack *p, int key)
{
	
	//栈顶加1后判断栈是否满	
	if (isfull(p))
	{
		printf("栈溢,无法进栈!");
		return;
	}
	else
	{
		//得到栈顶加 1
		p->top = p->top + 1;
		//进栈		
		p->a[p->top] = key;
	}
}
void pop(Stack *p)
{
	//判断栈是否为空
	if (isempty(p))
	{
		printf("栈为空,不能出栈!");
		return;
	}
	else
	{
		printf("%d\n", p->a[gettop(p)]);
		p->top = p->top - 1;
	}
}
//显示栈的所有数据
void show(Stack *p)
{
	while (!isempty(p))
	{
		printf("%3d", p->a[p->top]);
		p->top -= 1;
	}
}

void main()
{
	Stack stack;
	//初始化
	init(&stack);
	for (int i = 0; i < 5; i++)
	{
		push(&stack,i);
	}	
	show(&stack);


	system("pause");
}




  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值