本文深入讲解了栈这一基本数据结构的概念、特点及其实现方式,包括栈的基本运算如创建、清空、判断栈空和栈满、元素入栈和出栈等,并详细介绍了顺序栈的存储结构和相关操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、栈的基本概念

    栈是限制在一端进行插入和删除的线性表。允许操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”,特点是:后进先出。

 

    

    栈的基本运算:

        (1)创建栈---create_stack(len)

        (2)清空栈---clear_stack(S)

        (3)判断是否栈空---is_empty_stack(S)

        (4)判断是否栈满---is_full_stack(S)

        (5)元素入栈---push_stack(S,x)

        (6)元素出栈---pop_stack(S)

        (7)获取栈顶元素---get_top_stack(S)

        (8)销毁栈---free_stack(S)

二、顺序栈

    存储结构:

        typedef   int   data_t;      //定义栈中数据元素的数据类型

        typedef   struct

        {

            data_t   *data;     //指向栈的存储空间

            int   maxlen;       //栈的最大元素个数

            int   top;             //栈顶位置下标

        }seqstack_t ;         //顺序栈类型定义

    栈的基本运算:

        (1)创建栈

                

                seqstack_t  *create_stack(int  len)

                {

                      seqstack_t  *S;

                      S = (seqstack_t  *)malloc(sizeof(seqstack_t));

                      S->data = (data_t  *)malloc(len * sizeof(data_t));

                      S->maxlen = len;

                      S->top = -1;

                      return  S;

                }

        (2)清空栈

                void  clear_stack(seqstack_t  *S)

                {

                     S->top = -1;

                }

        (3)判断是否栈空

                int  is_empty_stack(seqstack_t  *S)

                {

                     return  (S->top == -1 ? 1 : 0);  //栈空返回1

                }

        (4)判断是否栈满

                int  is_full_stack(seqstack_t  *S)

                {

                     return  (S->top == maxlen - 1 ? 1 : 0);    //栈满返回1

                }

        (5)元素入栈

                void  push_stack(seqstack_t  *S,data_t  x)

                {

                     //判断是否栈满

                     if(is_full_stack(S) == 1)

                     {

                          printf("栈满,无法入栈\n");

                          return;

                     }

                     S->top ++;

                     S->data[S->top] = x;

                     return ;

                }

        (6)元素出栈

                data_t  pop_stack(seqstack_t  *S)

                {

                     //判断是否栈空

                     if(is_empty_stack(S) == 1)

                     {

                          printf("栈空,无法出栈\n");

                          return -1;

                     }

                     S->top --;

                     return  S->data[S->top+1];

                }

        (7)获取栈顶元素

                data_t  get_top_stack(seqstack_t  *S)

                {

                     //判断是否栈空

                     if(is_empty_stack(S) == 1)

                     {

                          printf("栈空,无法获取栈顶元素\n");

                          return -1;

                     }

                     return  S->data[S->top];

                }

        (8)销毁栈

                void  free_stack(seqstack  *S)

                {

                     free(S->data);

                     S->data = NULL;

                     free(S);

                     S = NULL;

                }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值