代码如下:

   1: # include <stdio.h>
   2: # include <stdlib.h>
   3:  
   4: # define STACKSIZE  100 /* 栈的大小*/
   5: # define INCREMENTSIZE 10 /*栈的增量*/
   6:  
   7: /* 栈存储结构的定义 */
   8: struct ds_stack_tag {
   9:     int *base ; /*栈的起始地址*/
  10:     int top ; /*指向栈顶*/
  11:     int size ;/*栈大小*/
  12: };
  13:  
  14: /*初始化为栈分配存储空间*/
  15: void ds_init(struct ds_stack_tag * s) {
  16:     s->base = (int *)malloc(STACKSIZE * sizeof(int)) ;
  17:     if (!s->base)
  18:     {
  19:         exit(0) ;
  20:     }
  21:     s->top = 0 ;
  22:     s->size = STACKSIZE ;
  23: }
  24:  
  25: /*判空,为空则返回0,否则返回1*/
  26: int ds_isEmpty(struct ds_stack_tag *s) {
  27:     if(!s->top)
  28:         return 1 ;
  29:     else
  30:         return 0 ;
  31: }
  32:  
  33: /*入栈*/
  34: void ds_push(struct ds_stack_tag * s,int elem) {
  35:     if((++ s->top) >= s->size) {/*空间不足,分配空间*/
  36:         int * add = (int *)realloc(s->base,(STACKSIZE + INCREMENTSIZE) * sizeof(int)) ;
  37:         if(!add)
  38:             exit(0) ;
  39:         s->base = add ;
  40:         s->size += s->size + INCREMENTSIZE ;
  41:         *(s->base + s->top) = elem ;
  42:         ++ s->top ;
  43:     }
  44:     else {
  45:         -- s->top ;
  46:         *(s->base + s->top) = elem ;
  47:         ++ s->top ;
  48:     }
  49: }
  50:  
  51: /*出栈*/
  52: int ds_pop(struct ds_stack_tag * s) {
  53:     if(!ds_isEmpty(s)) {
  54:         return *(s->base + (-- s->top)) ;
  55:     }
  56:     else
  57:         return 0 ;
  58: }
  59:  
  60: /*释放分配的空间*/
  61: void ds_destroy(struct ds_stack_tag *s) {
  62:     free(s->base) ;
  63: }

运行结果:

1.初始化完成后

2.压入1,2,3三个数据后

3.弹出一个数据后

在问题比较简单时,可直接使用个数组模拟栈的工作。

下面的代码使用数组,实现了十进制向二进制的转换。

   1: void DecimalToBinary(int dec) {
   2:     int temp ;
   3:     char result[20] ; /*结果*/
   4:     int i ;
   5:     
   6:     temp = dec ;
   7:     for(i = 0 ; temp != 0 ; i ++) {
   8:         if(temp%2)
   9:             result[i] = '1' ;
  10:         else
  11:             result[i] = '0' ;
  12:         temp /= 2 ;
  13:     }
  14:     
  15:     --i ;
  16:     printf("%d转换为二进制为:",dec) ;
  17:     for( ; i >= 0 ; --i)
  18:         printf("%c",result[i]) ;
  19: }

运行结果:

转载于:https://www.cnblogs.com/lovelq522/archive/2011/04/26/2029657.html

数据结构之表(5)栈的顺序实现相关推荐

  1. 【Python数据结构系列】❤️《栈(顺序栈与链栈)》——❤️知识点讲解+代码实现

    灵魂拷问:为什么要学数据结构? 数据结构,直白地理解,就是研究数据的存储方式.数据存储只有一个目的,即为了方便后期对数据的再利用.因此,数据在计算机存储空间的存放,决不是胡乱的,这就要求我们选择一种好 ...

  2. 数据结构-线性表(栈与队列的特殊性)

    通过前面的介绍我们知道,数据结构按照对应关系可以分为一对一的线性表结构.一 对多的树形结构,多对多的图形结构,以及同属一个集合的集合结构. 在此我们分析一下线性表结构: 对于线性表我们知道有数组.链表 ...

  3. 数据结构——线性表的查找:顺序查找、设置监视哨的顺序查找、折半查找

    算法7.1顺序查找 #include<iostream> using namespace std;typedef int KeyType; typedef int InfoType; #d ...

  4. Java数据结构(1.1):数据结构入门+线性表、算法时间复杂度与空间复杂度、线性表、顺序表、单双链表实现、Java线性表、栈、队列、Java栈与队列。

    数据结构与算法入门 问题1:为什么要学习数据结构          如果说学习语文的最终目的是写小说的话,那么能不能在识字.组词.造句后就直接写小说了,肯定是不行的, 中间还有一个必经的阶段:就是写作 ...

  5. 数据结构-线性表之用队列实现栈用栈实现队列

    文章目录 **********用队列实现栈 一:思路 二:实现 (1)结构体定义 (2)初始化和销毁 (3)进"栈" (4)出"栈" 三:代码 ******** ...

  6. 表、栈和队列(JAVA实现)

    文章目录 1 概述 2 表 ADT 2.1 预先知识 2.1.1 Collection 接口 2.1.2 Iterator接口 2.2 List 表 的数组实现(ArrayList) 2.3 List ...

  7. 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)

    C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...

  8. b+树时间复杂度_数据结构:线性表,栈,队列,数组,字符串,树和二叉树,哈希表...

    作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...

  9. c语言栈是什么线性表,数据结构严薇敏——栈的顺序存储(C语言)

    栈是限定只能在表尾进行插入和删除操作的线性表. 栈的特点是后进先出. 它的顺序数据结构定义为 typedef struct SQSTACK { ElemType *base; ElemType *to ...

  10. 数据结构之线性表/队列/栈/树

    数据 数据项:一个数据元素可以由若干数据项组成. (一个实体类的一个属性) 数据对象:有相同性质的数据元素的集合,是数据的子集. (该实体类对象) 数据结构:是相互之间存在一种或多种特定关系的数据元素 ...

最新文章

  1. iOS自动签名打包(xcodebuild)----常用
  2. snmpd 子代理模式编译测试
  3. AI芯片,看好云端还是边缘?
  4. keras inceptionv1 到 inceptionv4演化
  5. Python编程4道练习题
  6. Win11系统点击回滚没有反应是怎么回事
  7. Python+matplotlib绘图时显示中文的设置方法
  8. html简单用户登录界面_简单实现 nginx 用户登录认证
  9. 【matlab】数值计算实现电路仿真
  10. 节选自周国平《风中的纸屑》里的一段话
  11. 安全测试(五)Android APK软件安全 APP应用安全 手机软件安全 apk安全 apk反编译 应用日志窃取 apk漏洞 应用软件本身功能漏洞 高危权限泄密风险等 移动应用常规安全讲解
  12. 二次采样设置的四种彩色模式RGB565,ARGB8888,ARGB4444,ALPHA_8
  13. 计算机一级c云大,云南大学网红C位易主!新晋流量霸主竟然是……
  14. 第四章 智能合约 [20]
  15. mysql四种隔离级别
  16. 【详细】阿里云域名解析步骤
  17. windows大小写,切换键修改lock or shift
  18. php面试题2021(php面试题2020)
  19. LOL暗影岛服务器维修,暗影岛-英雄联盟官方网站-腾讯游戏
  20. 2023,3,30,30 31

热门文章

  1. 一文搞懂 Java 泛型,非常详细!
  2. Java并发编程中的若干核心技术,向高手进阶
  3. Spring Boot 2动态修改日志级别
  4. 专心做业务,别想不开搞研发
  5. 理解Go 1.5 vendor
  6. 【Python】青少年蓝桥杯_每日一题_4.03_求偶数
  7. 数控程序中r及q代表什么_邹军:如何利用数学公式编写cnc程序?
  8. 数据中心、智慧机房全套解决方案
  9. 1000亿,行业巨头纷纷押宝的数据中心
  10. 数据中心节能的13个有用小知识