深入了解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;
}

运行结果如下:

总结

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

(0)

相关推荐

  • C语言实现链栈的步骤

    链栈图解 链栈的常规操作 /********************* 链栈的常规操作 ****************************/ LinkStack InitLinkStack(); // 初始化链栈 int StackEmpty(); // 判断链栈空 int StackLength(); // 求链栈长(链栈元素个数) int Push(); // 入栈 压栈 ElemType Pop(); // 出栈 弹栈 void DestroyStack(); // 销毁链栈 /**

  • C语言利用栈实现对后缀表达式的求解

    本文实例为大家分享了C语言实现对后缀表达式(逆波兰表达式)的求解代码,供大家参考,具体内容如下 逆波兰表达式: 逆波兰表达式又叫后缀表达式.它是由相应的语法树的后序遍历的结果得到的. 例:5 - 8*(6 + 7) + 9 / 4: 其中缀表达式为:5 - 8 * 6 + 7 + 9 / 4 其语法树如下: 因此根据语法树可以得出他后序遍历(后缀表达式)为: 5 8 6 7 + * - 9 4 / + 这样就实现了中缀表达式到后缀表达式的转换. 同样的也可以得出他的前序遍历(前缀表达式也称波兰表

  • C语言实现出栈序列合法性判定

    本文实例为大家分享了C语言实现出栈序列合法性判定的具体代码,供大家参考,具体内容如下 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序. 假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 输入格式 第一行一个整数n,表示输入序列的长度.(1<=n<=10000) 第二行n个整数,表示栈的压入顺

  • 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

  • C语言实现出栈序列

    本文实例为大家分享了C语言实现出栈序列的具体代码,供大家参考,具体内容如下 题目描述: 现在有一个1-n的排列,入栈序列已知,请给出字典序最大的出栈序列. 输入格式 第一行一个整数n.(1<=n<=100) 第二行n个整数,数据确保为1-n的排列. 输出格式 输出n个整数,既字典序最大的出栈序列. 输入样例 5 1 2 4 5 3 输出样例 5 4 3 2 1 解题思路: 1.获取当前数组的最大值,并且需要知道它的下标.所以定义了两个方法,getMax来获取数组的最大值maxNum,getMa

  • 深入了解C语言栈的创建

    目录 栈的结构定义如下: 栈的初始化如下: 栈元素的输入接口: 完整代码如下: 运行结果如下: 总结 栈:是限定仅在表尾进行插入和删除操作的线性表! 栈的结构定义如下: typedef struct Stack { SLDataType *base;//栈底元素的地址 int top;//栈顶元素的位置 } Stack; 栈的初始化如下: SLDataType initStack(Stack &S) { S.base=(SLDataType*)malloc(N*sizeof(SLDataType

  • C语言栈顺序结构实现代码

    复制代码 代码如下: /*** @brief C语言实现的顺序结构类型的栈* @author wid* @date 2013-10-29** @note 若代码存在 bug 或程序缺陷, 请留言反馈, 谢谢!*/ #include <stdio.h>#include <stdlib.h>#include <string.h> #define TRUE 1#define FALSE 0 typedef struct Point2D{    int x;    int y;

  • C语言栈与队列面试题详解

    目录 1.括号匹配问题 2.用队列实现栈 3.用栈实现队列 4.设计循环队列 1.括号匹配问题 链接直达: 有效的括号 题目: 思路: 做题前,得先明确解题方案是啥,此题用栈的思想去解决是较为方便的,栈明确指出后进先出.我们可以这样设定: 遇到左括号“ ( ”.“ [ ”.“ { ”,入栈. 遇到右括号“ ) ”.“ ] ”.“ } ”,出栈,跟左括号进行匹配,不匹配就报错. 上两句话的意思就是说我去遍历字符串,如果遇到左括号,就入栈:遇到右括号,就出栈顶元素,并判断这个右括号是否与栈顶括号相匹

  • C语言栈与队列相互实现详解

    目录 一.本章重点 二.队列实现栈 三.栈实现队列 四.解题思路总结 一.本章重点 用两个队列实现栈 用两个栈实现队列 解题思路总结 二.队列实现栈 我们有两个队列: 入栈数据1. 2. 3 可以将数据入队列至队列一或者队列二. 如何出栈? 但出栈要先出1,怎么办? 第一步: 将队列一出队n-1个至队列二. 第二步: pop队列一的最后一个元素. 接下来怎么入栈呢? 将元素入队至不为空的队列. 怎么判断栈空? 队列一和队列二都为空的情况下,栈就是空的. 如何取栈顶元素? 取不为空的队列尾部元素.

  • GO语言文件的创建与打开实例分析

    本文实例分析了GO语言文件的创建与打开用法.分享给大家供大家参考.具体分析如下: 文件操作是个很重要的话题,使用也非常频繁,熟悉如何操作文件是必不可少的.Golang 对文件的支持是在 os package 里,具体操作都封装在 type File struct {} 结构体中. 一.func Open(name string) (file *File, err error) 再简单不过了,给一个路径给它,返回文件描述符,如果出现错误就会返回一个 *PathError. 这是一个只读打开模式,实

  • C语言 栈的表示和实现详细介绍

    C语言 栈的表示和实现详细介绍 定义:栈是限定仅在表尾进行插入和删除操作的线性表. 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表.它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来).栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针. 栈是允许在同一端进行插入和删除操作的特殊线性表.允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom):栈底固定,而栈顶浮动:

  • 易语言操作数据库“创建”命令

    创建指定的数据库文件,如果该数据库文件存在,将被覆盖.成功返回真,失败返回假. 语法: 逻辑型 创建 (欲创建数据库的文件名,字段信息表) 参数名 描 述 欲创建数据库的文件名 必需的:文本型. 字段信息表 必需的:字段信息,参数数据只能提供数组数据.参数数组值中顺序指定本数据库中所有字段的信息. 例程: 说明: 首先判断"字段名称编辑框"是否为空,然后判断"字段类型组合框"是否有选项.如果都有内容,则将欲添加的字段的名称和类型存放在"临时字段信息&quo

  • C语言 栈与数组的实现详解

    目录 栈的实现 栈的定义 数组实现 静态栈 动态栈 链栈 栈的实现 首先我们思考一个问题,什么是栈? 栈是数据结构的一种,栈在我们日常编码中遇到的非常多,很多人对栈的接触可能仅仅局限在 递归使用的是栈 和 StackOverflowException,栈是一种后进先出的数据结构(可以想象生化金字塔的牢房和生化角斗场的狗洞). 栈的定义 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅在表尾进行插入和删除操作的线性表.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进

  • GO语言协程创建使用并通过channel解决资源竞争

    目录 创建协程 主协程终止,子协程也终止 runtime包 Gosched让出CPU时间片 Goexit立即结束当前协程 GOMAXPROCS设置并行CPU核数最大值,并返回之前的值 runtime.NumGoroutine()获取当前运行中的goroutine数量 多任务资源竞争问题 通过channel解决资源竞争问题 主协程如何等其余协程完再退出 创建协程 goroutine是go的设计核心,就是协程主协程终止了,子协程也终止 package main import ( "fmt"

  • R语言使用gganimate创建可视化动图

    目录 前言 加载R包,数据 ggplot2绘制 gganimate 动态 参考资料 前言 介绍一个主要用于绘制动画的ggplot2的扩展包---gganimate包. Hans Rosling的关于“New Insights on Poverty”的TED演讲绝对是对我影响最大的几个TED之一,原来数据可以这样展示,,,可视化可以这样炫,,,故事可以这样讲... 下面尝试使用 gganimate 包和 gapminder 数据集,实现类似可视化过程. 加载R包,数据 #R包安装 install.

随机推荐