线性栈

1.判空条件:S.top==-1;
2.满栈条件:S.top=maxn-1

#include<cstdio>
#include<stdlib.h>#define maxn 1000typedef struct node
{int date[maxn];int top;//类似于栈顶指针
}seqstack;void stack_init(seqstack *S)//栈的初始化
{S->top = -1;
}int stack_empty(seqstack S)//判断栈是否为空栈
{if (S.top == -1)return 0;elsereturn 1;
}void Push(seqstack* S, int value)//入栈
{if (S->top == maxn - 1){printf_s("栈已满!\n");exit(0);}else{S->top++;S->date[S->top] = value;}
}int Pop(seqstack* S)//出栈操作
{if (S->top == -1){printf_s("空栈!\n");return 0;}else{int x = S->date[S->top];S->top--;return x;}
}int stack_gettop(seqstack* S)//取栈顶元素
{if (S->top == -1){printf_s("空栈!\n");return 0;}else{int x = S->date[S->top];return x;}
}void stack_clear(seqstack* S)//清空栈
{S->top = -1;
}int stack_length(seqstack* S)//求栈长
{return S->top;
}void stack_show(seqstack* S)//显示栈中所有元素
{if (S->top == -1){printf_s("空栈!\n");exit(0);}else{int key = S->top;while (S->top!=-1){printf_s("%d\n", stack_gettop(S));}}
}int main()
{seqstack* S;S = (seqstack*)malloc(sizeof(seqstack));stack_init(S);int n;scanf_s("%d", &n);for (int i = 0; i < n; i++){int value;scanf_s("%d", &value);Push(S, value);}stack_show(S);return 0;
}

链式栈

1.判空条件:S.top==NULL;

#include<stdio.h>
#include<stdlib.h> //可以使用 malloc ,用<malloc.h>也可以
#define len sizeof(LStackNode) typedef struct node
{struct node* next;int data;
}LStackNode;typedef struct
{struct node* top;//栈顶指针,只会指向栈顶元素
}Linke_stack;Linke_stack* S;
void stack_init(Linke_stack* S)//栈的初始化
{S->top =NULL;//指向空
}int stack_empty(Linke_stack S)//判断栈是否为空栈,空为真
{if (S.top == NULL)return 1;elsereturn 0;
}void Push(Linke_stack* S, int value)//入栈
{LStackNode* node;node = (LStackNode*)malloc(len);if (node == NULL){printf_s("申请空间失败!\n");exit(0);}else{node->data = value;node->next = S->top;S->top = node;}
}int Pop(Linke_stack* S)//出栈操作
{if ( S->top==NULL){printf_s("空栈!\n");return 0;}else{int value = S->top->data;LStackNode* node;node = S->top;S->top = node->next;//指针下移栈顶free(node); //记得释放内存return value;//返回栈顶元素}
}int stack_gettop(Linke_stack* S)//取栈顶元素
{if (S->top == NULL){printf_s("空栈!\n");return 0;}else{int x = S->top->data;return x;}
}void stack_clear(Linke_stack* S)//清空栈
{S->top = NULL;
}int stack_length(Linke_stack S)//求栈长
{int count = 0;while (S.top != NULL){count++;S.top = S.top->next;}return count;
}//显示栈中所有元素,
void stack_show(Linke_stack S)//注意形参只能用单向传递,不能地址转递(即Linke_stack *S
{//Linke_stack* s = S;if (S.top == NULL){printf_s("空栈!\n");exit(0);}else{while (S.top != NULL){printf_s("%d\n", S.top->data);S.top= S.top->next;}//S->top = s->top;}
}int main()
{Linke_stack* S;S = (Linke_stack*)malloc(len);stack_init(S);int n;scanf_s("%d", &n);for (int i = 0; i < n; i++){int value;scanf_s("%d", &value);Push(S, value);}stack_show(*S);int m;printf_s("请输入要入栈的元素:");scanf_s("%d", &m);Push(S,m);stack_show(*S);Pop(S);stack_show(*S);return 0;
}

c语言数据结构篇之栈(线性栈与链式栈)相关推荐

  1. C语言数据结构篇——单循环链表的创建,插入,节点删除,打印等操作

     作者名:Demo不是emo  主页面链接:主页传送门 创作初心:对于计算机的学习者来说,初期的学习无疑是最迷茫和难以坚持的,中后期主要是经验和能力的提高,我也刚接触计算机1年,也在不断的探索,在CS ...

  2. C语言数据结构篇——双链表的创建,插入,节点删除,打印等操作

    作者名:Demo不是emo  主页面链接:主页传送门 创作初心:对于计算机的学习者来说,初期的学习无疑是最迷茫和难以坚持的,中后期主要是经验和能力的提高,我也刚接触计算机1年,也在不断的探索,在CSD ...

  3. 【数据结构篇03】栈和队列

    目录 基本概念 栈 队列 ​​​​代码演示: 多说几句 基本概念 栈:只能在一端进行插入(入栈)或删除(出栈)的操作的线性表,允许操作的一段称为栈(Top). 特点:先进后出(FILO) 存储结构:顺 ...

  4. Qz学算法-数据结构篇(链表、栈)

    链表(Linked List) 链表是有序的列表,但是它在内存中是存储如下 介绍 链表是以节点的方式来存储,是链式存储 每个节点包含data域,next域:指向下一个节点. 如图:发现链表的各个节点不 ...

  5. 算法解剖 - 数据结构篇 - 栈

    目录 1. 栈是一种什么样的数据结构? 2. 栈的实现 3. 栈的应用 <1>基于它的LIFO策略,可以逆序排列 <2>模拟计算机实现简单的算术表达式求值 1. 栈是一种什么样 ...

  6. 数据结构(C语言版) 第 三 章 栈与队列 知识梳理 + 作业习题详解

    目录 一.栈 0.栈的基本概念 1.栈的实现 2.栈与递归 3.Hanoi塔问题 二.队列 0.队列的基本概念 1.队列的实现 2.循环队列 2.1循环队列的相关条件和公式: 3.链队列 4.链队列完 ...

  7. 数据结构:线性数据结构(1)-栈(栈,队列,deques, 列表)

    栈,队列,deques, 列表是一类容器,他们数据项之间的顺序由添加或删除的顺序决定,一旦一个数据项被添加,它相对于前后元素一直保持该位置不变.注入此类的数据结构称为线性数据结构. 栈 栈(栈,队列, ...

  8. c++数据结构中 顺序队列的队首队尾_用队列实现栈,用栈实现队列,听起来有点绕,都搞懂了就掌握了精髓

    一.背景 栈和队列是数据结构中最常用到的两种结构,有非常广泛的运用,该篇文章将通过动画的手段,展示栈和队列相互实现的底层原理,让我们真正搞懂栈和队列的特性. 二.概念 2.1 栈 栈[Stack]:是 ...

  9. 什么是内存中的堆和栈?与数据结构中的堆和栈有什么区别?

    内存中的堆和栈 一直使用堆和栈的相关概念,对内存中(操作系统)中的堆与栈和数据结构中的堆与栈一直不求甚解,这次,突然想起这个问题,在此进行一个简单梳理归纳,如有错误,恳请读者指出. 栈(stack) ...

最新文章

  1. 如何设置 Linux 上 SSH 登录的 Email 提醒
  2. python基础语法有哪些-Python基础语法
  3. service能去调另外一个service吗_kubernetes的service和pod是如何关联的?
  4. 『流畅的Python』第1~4章笔记_数据结构、编码
  5. 【遥感物候】植被物候与气候(气温和降水)条件的空间相关性分析
  6. Build Roads
  7. windows下面使用nssm设置新的服务实现开机自启等
  8. 模拟电子技术不挂科学习笔记3(放大电路的分析方法)
  9. 什么是函数模板以及什么是类模板
  10. 日出时的画面_摄影教学堂:如何拍摄日出日落?详解日出日落的摄影技巧
  11. 高仿城通网盘php,PHP-php 如何实现同时允许下载的文件个数控制,类似于城通网盘这样的文件下载控制...
  12. android 远程windows7,将Android手机屏幕快速投影至WIN7的PC和投影仪
  13. host速度 mtk usb_mtk-usb代码分析之usb gadget
  14. 【exe加壳:修改可执行文件的PE头,增加一节,修改程序入口地址为该节】
  15. 那些年我们一起撸过的缓存写法
  16. 【2020年牛客暑假第九场】E题 Groundhog Chasing Death
  17. mac top命令,查内存 cpu
  18. scim,ibus,fcitx我忍不住有话要说......
  19. Android搜索功能的案例,本地保存搜索历史记录
  20. Delphi 操作EXCEL折线图

热门文章

  1. mysql 多维度分表_亿级订单数据分库分表设计方案(满足多维度查询:订单号、用户、商家、渠道)...
  2. linux安装oracle出现os,linux下安装oracle
  3. windows10如何删除文件时提示?(回收站--右键属性--显示删除确认对话框)
  4. 运行 OpenCV-Python-Toturial-中文版 遇到的一些错误问题
  5. linux——部署DNS
  6. linux——系统排错之引导恢复shell
  7. JAVA处理 M_一次Java内存泄露处理手记
  8. 企业微信oauth认证_OAuth2身份认证
  9. 前后端完全分离出现跨域、无法访问后台解决方案
  10. 进程隐藏工具hidetoolz源码_linux最好用的资源监控工具-glances