C语言栈之顺序栈

 更新时间:2022年02月10日 15:58:35   作者:Tkpluto  
这篇文章主要为大家详细介绍了C语言的顺序栈,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

定义

用顺序存储方式实现的栈称为顺序栈,顺序栈对应于顺序表。

设栈中的数据元素的类型是整型,用一个足够长的一维数组s来存放元素,数组的最大容量为STACK_INTSIZE。同时假设栈顶指针top。(在以下的程序中,top不是指向当前的栈顶元素,而是指向下一次将要进栈的元素的存储位置)

顺序栈可以描述如下:

#define STACK_INTSIZE 50 /*分配栈的最大存储空间*/
#define DataType int /*定义栈中数据元素的类型*/
DataType s[STACK_INTSIZE];/*用来存放栈中数据元素的内存空间*/
int top;/*定义栈顶指针*/

可以用结构体数组来实现顺序栈:

#define STACK_INTSIZE 50
#define DataType int
typedef struct
{
    DataType s[STACK_INTSIZE];
    int top;
} Stack;
Stack *st;/*指针st用来引用一个顺序栈*/

栈顶指针动态地反映了栈中元素的变化情况,top=0时,表示空栈top=1时,表示已经有一个元素进栈进栈时,栈顶指针top上移,top加1top=STACK_INTSIZE,表示栈满出栈时,栈顶指针top下移,top减1

1.建立空栈

Stack *InitStack()
{
    Stack *s;
    s = (Stack *)malloc(sizeof(Stack));
    s->top = 0;
    return s;
}

2.进栈

void Push(Stack *st, DataType x)
{
    if (st->top >= STACK_INTSIZE)
        printf("栈已满,不能入栈!\n");/*若栈满则不能进栈,输出出错信息*/
    else
    {
        st->s[st->top] = x;/*元素x进栈*/
        st->top++;/*栈顶指针top加1*/
    }
}

3.出栈

void Pop(Stack *st)
{
    if (st->top == 0)
        printf("栈空,不能出栈!\n");/*若栈空则不能出栈,且输出栈空的信息*/
    else/*栈非空*/
    {
        st->top--;/*top减1,元素出栈*/
    }
}

4.读栈顶元素

DataType ReadTop(Stack *st)
{
    DataType x;
    if (st->top == 0)
    {
        printf("栈中无元素");
        return (0);
    }
    /*若栈空则返回0*/
    else
    {
        x = st->s[st->top-1];/*取栈顶元素*/
        return (x);/*返回x即栈顶元素的值*/
    }
}

5.遍历栈

结合元素出栈算法和读取栈顶元素算法,使用循环,当st->top=0时结束循环,即可遍历栈

void ShowStack(Stack *st)
{
    while (st->top > 0)
    {
        st->top--;
        printf("%d", st->s[st->top]);
    }
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!    

相关文章

  • C++中函数模板的用法详细解析

    C++中函数模板的用法详细解析

    所谓函数模板实际上是建立一个通用函数,其涵涵素类型额形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板
    2013-10-10
  • C++实现学生信息管理系统(完整版)

    C++实现学生信息管理系统(完整版)

    这篇文章主要为大家详细介绍了C++实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C语言实现求解最小公倍数的算法示例

    C语言实现求解最小公倍数的算法示例

    这篇文章主要为大家介绍了C语言如何实现求解任意两个正整数的最小公倍数,文中采用了穷举法和定理法。感兴趣的小伙伴快来跟随小编一起学习学习吧
    2021-12-12
  • C++ 实现多数的最大公约数的实例

    C++ 实现多数的最大公约数的实例

    这篇文章主要介绍了C++ 实现多数的最大公约数的实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • 浅谈Qt QGraphics体系及刷新机制介绍

    浅谈Qt QGraphics体系及刷新机制介绍

    这篇文章主要介绍了浅谈Qt QGraphics体系及刷新机制介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • C语言实现贪吃蛇游戏设计

    C语言实现贪吃蛇游戏设计

    这篇文章主要为大家详细介绍了C语言实现贪吃蛇游戏设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • 函数指针的一些概念详解

    函数指针的一些概念详解

    首先看函数指针的语法,举一个最简单的例子,要创建一个函数指针,则它与它指向的函数,在参数个数类型以及返回值上都保持一致,跟重载的要求应该是一样的
    2013-09-09
  • C语言设计一个闪闪的圣诞树

    C语言设计一个闪闪的圣诞树

    本文使用C语言基础知识在控制台打印一个圣诞树效果,真的很简单哦,一起通过本文学习吧
    2016-12-12
  • C语言中关于库函数 qsort 快排的用法

    C语言中关于库函数 qsort 快排的用法

    快速排序Qsort是所有学习算法和数据结构最基础的一个部分,也是考试题和面试的一个小重点。本片文章带你了解Qsort的详细用法规则
    2021-09-09
  • C语言运算符的优先级和结合性实例详解

    C语言运算符的优先级和结合性实例详解

    本文主要介绍C语言运算符的知识,这里对运算符的优先级和结合性做出了详解,并附实例代码,希望能帮助有需要的小伙伴
    2016-07-07

最新评论