数据结构之表(5)栈的顺序实现
代码如下:
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)栈的顺序实现相关推荐
- 【Python数据结构系列】❤️《栈(顺序栈与链栈)》——❤️知识点讲解+代码实现
灵魂拷问:为什么要学数据结构? 数据结构,直白地理解,就是研究数据的存储方式.数据存储只有一个目的,即为了方便后期对数据的再利用.因此,数据在计算机存储空间的存放,决不是胡乱的,这就要求我们选择一种好 ...
- 数据结构-线性表(栈与队列的特殊性)
通过前面的介绍我们知道,数据结构按照对应关系可以分为一对一的线性表结构.一 对多的树形结构,多对多的图形结构,以及同属一个集合的集合结构. 在此我们分析一下线性表结构: 对于线性表我们知道有数组.链表 ...
- 数据结构——线性表的查找:顺序查找、设置监视哨的顺序查找、折半查找
算法7.1顺序查找 #include<iostream> using namespace std;typedef int KeyType; typedef int InfoType; #d ...
- Java数据结构(1.1):数据结构入门+线性表、算法时间复杂度与空间复杂度、线性表、顺序表、单双链表实现、Java线性表、栈、队列、Java栈与队列。
数据结构与算法入门 问题1:为什么要学习数据结构 如果说学习语文的最终目的是写小说的话,那么能不能在识字.组词.造句后就直接写小说了,肯定是不行的, 中间还有一个必经的阶段:就是写作 ...
- 数据结构-线性表之用队列实现栈用栈实现队列
文章目录 **********用队列实现栈 一:思路 二:实现 (1)结构体定义 (2)初始化和销毁 (3)进"栈" (4)出"栈" 三:代码 ******** ...
- 表、栈和队列(JAVA实现)
文章目录 1 概述 2 表 ADT 2.1 预先知识 2.1.1 Collection 接口 2.1.2 Iterator接口 2.2 List 表 的数组实现(ArrayList) 2.3 List ...
- 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)
C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...
- b+树时间复杂度_数据结构:线性表,栈,队列,数组,字符串,树和二叉树,哈希表...
作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...
- c语言栈是什么线性表,数据结构严薇敏——栈的顺序存储(C语言)
栈是限定只能在表尾进行插入和删除操作的线性表. 栈的特点是后进先出. 它的顺序数据结构定义为 typedef struct SQSTACK { ElemType *base; ElemType *to ...
- 数据结构之线性表/队列/栈/树
数据 数据项:一个数据元素可以由若干数据项组成. (一个实体类的一个属性) 数据对象:有相同性质的数据元素的集合,是数据的子集. (该实体类对象) 数据结构:是相互之间存在一种或多种特定关系的数据元素 ...
最新文章
- iOS自动签名打包(xcodebuild)----常用
- snmpd 子代理模式编译测试
- AI芯片,看好云端还是边缘?
- keras inceptionv1 到 inceptionv4演化
- Python编程4道练习题
- Win11系统点击回滚没有反应是怎么回事
- Python+matplotlib绘图时显示中文的设置方法
- html简单用户登录界面_简单实现 nginx 用户登录认证
- 【matlab】数值计算实现电路仿真
- 节选自周国平《风中的纸屑》里的一段话
- 安全测试(五)Android APK软件安全 APP应用安全 手机软件安全 apk安全 apk反编译 应用日志窃取 apk漏洞 应用软件本身功能漏洞 高危权限泄密风险等 移动应用常规安全讲解
- 二次采样设置的四种彩色模式RGB565,ARGB8888,ARGB4444,ALPHA_8
- 计算机一级c云大,云南大学网红C位易主!新晋流量霸主竟然是……
- 第四章 智能合约 [20]
- mysql四种隔离级别
- 【详细】阿里云域名解析步骤
- windows大小写,切换键修改lock or shift
- php面试题2021(php面试题2020)
- LOL暗影岛服务器维修,暗影岛-英雄联盟官方网站-腾讯游戏
- 2023,3,30,30 31