z【11-1-2】栈数组模式实现

练习1: 顺序栈栈的数组实现

/*两种栈,一种是内存里面的栈,一种是栈的数据结构,现讲栈的数据结构,先入后出,
喝酒喝的少栈溢出,喝酒喝的多队列溢出,用栈可以实现顺序,也可以实现逆序先需要一个结构体,
用栈模拟递归,实现顺序和逆序,栈有4个接口,1是把栈清空,2是判断一个栈是否为空,3是在这压入一个数据,4是取出一个数据,我们只能在栈顶操作,所以我们如何实现一个栈呢?
接下来要实现一个函数*/
#define N 50  //避免栈溢出,让它等于50,让N来存放这个数据,因为我们要避免栈溢出,需要判定一下N 
struct mystack
{
//用一数组存放一个栈
int top;//代表栈顶,代表栈最高的下标,
int data[N];//代表存放数据,让栈最大容量为50,越过数组的界限就发生溢出,


};
struct mystack selfstack = { -1, {0} };/*栈的初始化,一开始栈的初始化,让栈顶为-1,因为数组里面从0开始,
 为-1意味着我是一个空栈,如何对数组全部初始化为0 呢?{0},把这个数组全部设置为0*/
//接下来栈首先来实现4个接口
int isempty();//isempty的作用是判定一下是否为空,函数的声明,为1代表为空,0代表非空
void setempty();//栈设置为空
int push(int num);//压入数据。压入数据参数为num,需要返回值,需要判断,成功为1,失败为0,什么样的情况会失败,栈溢出会失败,因为栈的容量是有限的
int pop();//弹出数据,弹出数据不需要参数
//接下来要实现4个函数
int isempty()//如何判定它是否为空,只要做一个判断就行
{
if (selfstack.top==-1)
{
return 1;
}
else{
return 0;
}
}
void setempty()
{
selfstack.top = -1;//设置栈为空
}
int push(int num)
{
if (selfstack.top==N-1)
{
return 0;//失败,什么都不操作
}
else{ //否则压入数据成功。
//下面2个只是理想情况,没有发生栈溢出,如果发生栈溢出,就需要上面判定
selfstack.top += 1;//小标往前移动一个
selfstack.data[selfstack.top] = num;//压入数据
return 1;
}
}
int pop()//2种数据,先判定栈为空,
{
if (selfstack.top==-1)
{
return -1;//栈为空
}
else
{
  //如果栈不为空,会弹出一数据,
selfstack.top -= 1;
return selfstack.data[selfstack.top + 1];//返回弹出的数据
}
}
void main101()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
//用栈的方式把它逆序输出
for (int i = 0; i < 10;i++)
{
push(a[i]);//填充数据,调用函数来实现,开始灌酒
}
//接下来做一循环,只要栈不为空,就把所有数据全部吐出来
while (!isempty)//不为空情况下,继续
{
printf("%d\n", pop());//输出数据
}
system("pause");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值