深入了解C语言栈的创建

 更新时间:2021年07月30日 14:42:41   作者:小尹同学⁣  
栈只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但是限定这种线性表只能在某一端进行插入和删除操作,这篇文章主要介绍了C语言对栈的实现基本操作

栈:是限定仅在表尾进行插入和删除操作的线性表!

栈的结构定义如下:

typedef struct Stack
{
    SLDataType *base;//栈底元素的地址
    int top;//栈顶元素的位置
} Stack;

栈的初始化如下:

SLDataType initStack(Stack &S)
{
  S.base=(SLDataType*)malloc(N*sizeof(SLDataType));//申请栈元素的存储空间
  if(S.base==NULL)
        return -1;
  S.top=0;
  return 1;
}

栈元素的输入接口:

SLDataType pushStack(Stack &S,int e)//输入栈的元素
{
    if(S.top==N)
        return 0;
    S.base[S.top]=e;
    S.top++;
    return 1;
}

完整代码如下:

#include<stdio.h>
#include<stdlib.h>
#define N 30
typedef int SLDataType;
typedef struct Stack
{
    SLDataType *base;//栈底元素的地址
    int top;//栈顶元素的位置
} Stack;
SLDataType initStack(Stack &S)
{
  S.base=(SLDataType*)malloc(N*sizeof(SLDataType));
  if(S.base==NULL)
        return -1;
  S.top=0;
  return 1;
}
SLDataType pushStack(Stack &S,int e)//输入栈的元素
{
    if(S.top==N)
        return 0;
    S.base[S.top]=e;
    S.top++;
    return 1;
}
void printStack(Stack &S)
{
    int i;
    i=0;
    while(i<S.top)
    {
        printf("%d ",S.base[i]);
        i++;
    }
    printf("\n");
}
int main()
{
    Stack S;
    int i,n,m;//n是入栈的个数
    if(initStack(S)==1)
        printf("栈初始化成功\n");
    printf("入栈的元素个数为:");
    scanf("%d",&n);
    i=1;
    printf("输入要入栈的元素:");
    while(i<=n)
    {
        scanf("%d",&m);
        if(pushStack(S,m)==0)
        {
            printf("%d入栈失败!\n",m);
            break;
        }
        i++;
    }
    printf("栈中的元素有:    ");
    printStack(S);//打印栈中的元素
    return 0;
}

运行结果如下:

在这里插入图片描述

总结

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

相关文章

  • VC++6.0中创建C++项目的实现步骤

    VC++6.0中创建C++项目的实现步骤

    本文主要介绍了VC++6.0中创建C++项目的实现步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Qt实现字符串生成二维码功能

    Qt实现字符串生成二维码功能

    这篇文章主要介绍了如何利用Qt实现字符串生成二维码功能,文中的实现过程讲解详细,对我们学习Qt有一定的帮助,需要的可以参考一下
    2022-01-01
  • c语言中exit和return的区别点总结

    c语言中exit和return的区别点总结

    小编今天给大家整理了关于c语言中exit和return的不同点及相关基础知识点,有兴趣的朋友们可以跟着学习下。
    2021-10-10
  • C++中函数模板与类模板的简单使用及区别介绍

    C++中函数模板与类模板的简单使用及区别介绍

    这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,文章还讨论了模板的关键区别、注意事项以及它们在实际编程中的应用,感兴趣的朋友一起看看吧
    2025-03-03
  • C++11 成员函数作为回调函数的使用方式

    C++11 成员函数作为回调函数的使用方式

    这篇文章主要介绍了C++11 成员函数作为回调函数的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C++中对象的常引用、动态建立和释放相关知识讲解

    C++中对象的常引用、动态建立和释放相关知识讲解

    这篇文章主要介绍了C++中对象的常引用、动态建立和释放相关知识讲解,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • 如何用C++实现双向循环链表

    如何用C++实现双向循环链表

    本篇文章是对用C++实现双向循环链表的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++ 中动态链接库--导入和导出的实例详解

    C++ 中动态链接库--导入和导出的实例详解

    这篇文章主要介绍了C++ 中动态链接库--导入和导出的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • 解决c++ error:crosses initialization of 问题

    解决c++ error:crosses initialization of 问题

    最近在写代码的时候,碰到了 crosses initialization of ... 的问题,只因我在 switch 的某个 case 分支下定义了一个变量,于是乎便将这个问题整理一下,需要的朋友可以参考下
    2023-03-03
  • OpenCV外接USB摄像头的方法

    OpenCV外接USB摄像头的方法

    这篇文章主要为大家详细介绍了OpenCV外接USB摄像头的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07

最新评论