数据结构之顺序栈的学习一

       栈的逻辑结构是一种后进先出(first in last out)的线性表,把栈中元素存入内存中可以采用顺序存储结构和链式存储结构。这里采用顺序存储结构实现。这样的栈叫做顺序栈。C语言中我们利用数组这种数据类型实现在内存中开辟一段连续空间,用来保存栈中元素。  

       栈只提供对它栈顶元素的操作。因此,栈是只在一端进行插入删除的线性表。

       栈的最核心操作:入栈(Push)将一个新值压入栈顶。   出栈(Pop) 将栈顶元素的值移出栈并返回这个值,这种方案的不利之处在于当想访问栈顶元素时只能Pop,这样会改变栈的状态。

因此,我们可以改进接口的设计:  入栈(Push)不变, 出栈(Pop)单纯的是出栈,另外添加一个接口(Top)专门用于获取栈顶元

素。Top的优点在于它可以反复访问栈顶元素,而不改变栈的状态。

       一个空栈不能执行出栈(Pop)操作, 一个满栈不能执行插入操作。因此,我们还需要一个函数用于告诉我们栈满否(is_full)

一个函数告诉我们栈空否(is_empty).

因此,栈的接口设计方案:

void Push(Stack_Type value); //入栈

void Pop(void);//出栈

Stack_Type Top(void); //获取栈顶元素

int is_full(void);//判断栈满否, 若满,返回1,否则返回0

int is_empty(void); //判断栈空否。若空,返回,否则返回0

#include<stdio.h>
#include<stdlib.h>
//自定义栈中元素类型
#define STACK_TYPE int
//自定义栈大小
#define STACK_SIZE  100

//定义静态数组,作为存储栈元素的容器
static STACK_TYPE stack[STACK_SIZE];
//利用数组下标记录栈顶位置, 定义指针,指向当前栈顶,初始时栈空。
static int top_element = -1;

//栈满否,若满,返回1,否则返回0
int is_full(void)
{    
    //top_element为静态数组的栈顶元素的下标。
    if(top_element == STACK_SIZE -1)
        return 1;
    else 
        return 0;
}

//栈空否,若空,返回1,否则返回0
int is_empty(void)
{
    if(top_element == -1)
        return 1;
    else 
        return 0;
}

//入栈
void Push(STACK_TYPE value)
{
    //栈未满时,才能入栈操作
    if(!is_full())
    {
        top_element++;
        stack[top_element] = value;
    }
}

//出栈
void  Pop(void)
{
    //栈未空时,才能出栈操作
    if(!is_empty())
    {
        top_element--;
    }
}

//获取栈顶元素
STACK_TYPE Top(void)
{
    return stack[top_element];
}

//测试
int main(void)
{
    //入栈
    Push(1);
    Push(2);
    printf("%d ",Top());
    Pop();
    printf("%d ", Top());
    system("pause");
    return 0;
}



 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值