【数据结构学习】顺序栈 C语言
#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
#define STACK_INT_SIZE 10 //存储空间初始分配量
#define STACKINCREMENT 5 //存储空间分配增量
typedef int ElemType;
typedef struct
{
ElemType *top; //栈顶指针
ElemType *base; //栈底指针
int stacksize; //当前分配的存储空间
}Sqstack;
/*栈的初始化*/
int InitStack(Sqstack *s)
{
s->base = (ElemType*)malloc(STACK_INT_SIZE*sizeof(ElemType));
if(!s->base) //申请空间失败
{
return ERROR;
}
s->top = s->base; //置为空栈
s->stacksize = STACK_INT_SIZE; //设置当前栈空间大小
}
/*
入栈
入栈之前先要判断栈是否已满,判断栈是否满的语句s->top-s->base>=s->stacksize
如果已满则需要重新申请增加空间,同时栈顶指针的位置也需要发生变化 s->top+1
*/
int Push(Sqstack *s,ElemType e) //插入的e是一个具体的值
{
if(s->top - s->base >= s->stacksize)
{
s->base = (ElemType*)realloc(s->base,s->stacksize+STACKINCREMENT);
//realloc函数的用法
//指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)
if(!s->base)return ERROR; //申请空间失败
s->top = s->base + s->stacksize; //重新设置当前栈顶指针
s->stacksize += STACKINCREMENT; //分配空间大小的改变
/*
s->stacksize += STACKINCREMENT;
s->top = s->base + s->stacksize;
两条语句不能颠倒的原因:
realloc
进行再分配空间的时候,如果在原来的基础上还有需要空间大小,那么
得到的是连续的内存空间,如果空间不够,那就需要重新开辟一块空间。地址发生变化。
一开始进行初始化的时候,栈顶指针和栈底指针指向同一位置
当空间满的时候,需要将栈顶指针移到最顶端,如果先执行
s->stacksize += STACKINCREMENT;
那么后面执行s->top = s->base + s->stacksize; 的时候
栈顶指针就指向后来申请空间的顶端,指向发生错误。
*/
}
//e = *s->top; 等号两边赋值发生错误
//*s->top = e; (1)
//s->top++; (2) 插入数据后栈顶指针向上移
*s->top++ = e; //将(1)和(2)句合成一句,参照i++
return OK;
}
/*
出栈
出栈首先要判断栈是否为空,判断栈是否为空的语句
s->top == s->base;
如果不为空,则出栈要需要将栈顶指针下移
*/
int Pop(Sqstack *s,ElemType *e)
//完成元素的出栈,只需要将地址传进去就可以
//不同于元素的入栈
{
if(s->top == s->base)return ERROR; //判断栈是否为空
//s->top--; 修改栈顶指针-1
//*e = *s->top; e返回出栈元素的值
*e = *--s->top;
return OK;
}
int Gettop(Sqstack *s,ElemType *e)
{
if(s->top == s->base)return ERROR;
*e = *(s->top-1); //只取栈顶元素值,不改变栈顶指针指向
return OK;
}
【数据结构学习】顺序栈 C语言相关推荐
- Python数据结构学习笔记——栈
目录 一.栈的定义和特性 (一)栈的定义 (二)栈的反转特性 二.实现分析步骤 三.栈的Python实现代码 四.栈的应用 (一)匹配圆括号 (二)匹配符号 (三)模2除法(十进制转二进制) (四)进 ...
- 数据结构遍历顺序栈_数据结构:顺序栈的实现
数据结构:顺序栈的实现 1.快速开始 栈是一种遵循元素后进(Push)先出(Pop)规则的线性表,即最后加入的元素最先出来,它的实现可以用数组或者链表. 它的特点如下: 后入先出,先入后出. 除了头尾 ...
- 数据结构学习之栈求解n皇后问题
数据结构学习之栈求解n皇后问题 0x1 目的 深入掌握栈应用的算法和设计 0x2 内容 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...
- 数据结构 创建顺序栈
3.27数据结构--创建顺序栈 结构体定义 初始化栈 入栈 出栈 销毁栈 运行结果截图: 代码: /*3.27 顺序栈*/#define _CRT_SECURE_NO_WARNINGS #define ...
- 数据结构:顺序栈基本操作(入栈和出栈)C语言详解(转载)by解学武
本文为解学武教程的免费章节 什么是顺序栈 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如 ...
- 数据结构《顺序栈》知识点详解+C语言完整代码-超详细
顺序栈 栈 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式 C语言代码实现 1. 顺序栈的表示 2. 结构体 3.初始化 4.入栈 5.出栈 6. 取栈顶元素 7.求长 8 ...
- 数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)
目录 一.栈 (一)栈的概念 (二)栈的排列 (三)共享栈 (四)栈的常见应用 二.顺序栈的定义 三.顺序栈的初始化 四.判断顺序栈是否为空栈 五.判断顺序栈是否为满栈 六.进栈(插入操作) 七.出栈 ...
- 【数据结构】顺序栈的实现(C语言)
栈的基本概念及其描述 栈是一种特殊的线性表,规定它的插入运算和删除运算均在线性表的同一端进行,进行插入操作和删除操作的那一端称为栈顶,另一端称为栈底. 栈的插入操作和删除操作分别称为进栈和出栈. FI ...
- 插入栈顶元素c语言,详解数据结构之顺序栈的基本操做(C语言描述)
1.栈是线性表的特例,所以栈的顺序存储其实也就是线性表顺序存储的简化,咱们称之为顺序栈,线性表是采用数组来实现的,所以顺序栈也采用数组来实现. 2.栈的结构定义:elementype类型根据实际状况而 ...
- 数据结构学习笔记(c语言版)
文章目录 一.概念 1.基本术语 2.算法 3.时间复杂度 4.数据的逻辑结构 二.线性表 1.存储结构 2.基本操作 三.栈 1.存储结构 2.基本操作 3.实际应用 四.队列 1.存储结构 2.基 ...
最新文章
- c语言程序设计江宝钏实验六答案,《C语言程序设计》(江宝钏著)实验三答案.doc...
- Jfinal框架Modal获取属性值非常奇怪的问题
- 关于STM中SPI运用的NSS引脚解读
- 1203正规式转换为有穷自动机
- XML校验 黄色惊叹号!!!
- SpringBoot中的异步操作与线程池
- Javascript--闭包
- 机器码、序列号、认证码、注册码的生成算法(一)
- Linux搭建Weblogic集群
- Windows开机启动项/自启动项文件夹位置
- 中文文案排版 - 中文排版教程
- 戴维斯分校 计算机硕士,加州大学戴维斯分校计算机研究生录取条件是什么?
- mac电脑显示隐藏文件方法
- 水果店圈子:水果店开业前需要做的准备,水果店开业当天要注意哪些问题
- ffplay flv mp4 转_利用 FFmpeg 将 MP4 转成 FLV
- [高考真题]2012年普通高等学校招生全国统一考试 英语(四川卷)
- C++自制游戏《Fighter》
- HDU 1593: find a way to escape
- 浅谈宽带卫星通信系统
- 安卓8.1后台进程活动与后台流量限制策略记录
热门文章
- 初探可编程网关 Pipy
- 万字长文,结合电商支付业务一文搞懂DDD
- 百度程序员妻子质疑老公不忠!每天很晚回家!周五下班不回家,说领导带他喝酒!结婚一年就出轨?...
- 分布式id生成策略,我和面试官扯了一个半小时
- 被业务方投诉了!CTO直摇头:人际关系处理太差,不懂维护“情感账户”
- 你知道select count(*)底层究竟干了啥么?
- session一致性架构设计极简教程
- 程序员,有没有比较适合的任务管理方式?
- 每日站会要关注团队目标-Scrum中文网
- C语言循环选择还有,C语言第五讲,语句 顺序循环选择.(示例代码)