数据结构--栈的顺序存储

系列文章目录

第三话  数据结构之栈

文章目录

  • 一、了解什么是栈
  • 二、栈的基本特征
  • 三、栈的基本操作步骤
    • 1.存储结构
    • 2.基本操作
    • 3.实现运用
  • 四、总结

前言

在软件设计中常用这样的数据结构,一种是进去得越早,出来得越晚。另一种是进去得越早,出来得越早。栈是执行“后进先出”规则的数据结构,设想有一个直径不大且一端封闭的竹筒,将若干个写有不同编号的小球放入竹筒里面,只能一个个一次放入,最后发现先放进去的小球只能后拿出来。

一、什么是栈?

生活中常常见到后进先出的例子,比如桶装薯片,薯片一片片放进去,吃的第一片肯定是最后放进去的;比如一叠堆起的盘子或盒子,取的第一个一定是最后放上去的;比如手枪子的弹匣,一粒一粒压进去,最后压进去的先打出来,最后压进去的最后打出来,而描述这种应用的数据结构就是栈。

二、栈的基本特征

1.后进先出

后进先出或者先进后出,最后进去的最先出来

2.一端性

栈是只能在一端进行插入和删除的线性表

 三、栈的基本操作

1、定义存储结构--顺序存储

typedef int Elemtype;
typedef struct{
    Elemtype date[maxsize];
    int top;
}Stack;

2、将栈初始化 

Stack *init_stack()
{
    Stack *s;
    s = (Stack*)malloc(sizeof(Stack));
    s->top = -1;
    return s;
}

3、入栈操作

int push(Stack *s,Elemtype x)
{
    if(s->top==maxsize-1){
        printf("栈已满");
        return 0;
    }else{
        s->top++;
        s->date[s->top] = x;
        return 1;
    }
}

4、出栈操作 

int pop(Stack *s,Elemtype *x)
{
    if(s->top=-1){
        printf("栈空,无法出栈\n");
        return 0;
    }else{
        *x = s->date[s->top];
        s->top--;
        return 1;
    }
}

5、在主行数中实现调用

int main(void)
{
    Stack *s1;
    s1 = init_stack();
    Elemtype x;
    int i,cnt = 0;
    printf("输入入栈元素,输入-1表示结束:\n");
    scanf("%d",&x);
    while(x!=-1){
        cnt++;
        push(s1,x);
        scanf("%d",&x);
    }//将入栈的数据输入
    for(i=0;i<cnt;i++){
        Pop(s1,&x);
        printf("x = %d\n",x);
    }//将入栈的数据输出
    return 0;
}

 

四、总结

由于栈是动态变化的数据结构,使用顺序栈时虽然可在某种程度上满足这种动态操作,但是一般数组长度的定义总是有限度的。为了克服这个弱点,在之后可以采用链式存储结构来描述栈

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值