《天勤数据结构》笔记——使用两个栈实现共享栈实现(C/C++)
共享栈为空的状态,左右两栈的栈顶指针都在两端,也就是各自栈的栈底
代码当中测试栈满的时候的状态图
共享栈的数据结构
typedef struct{int elem[maxSize];int top[2];
}SqStack;
入共享栈的操作,因为共享栈是由两个栈组成的,因此我们在入栈的时候需要选择入栈的编号,也就是stNo,同时要注意栈满的特殊情况
int push(SqStack &st, int stNo, int x){if (st.top[0]+1<st.top[1]){ //先判断栈是否是满的if (stNo==0){++(st.top[0]);st.elem[st.top[0]]=x;return 1; //入栈成功}else if (stNo==1){--(st.top[1]);st.elem[st.top[1]]=x;return 1;}elsereturn -1;}elsereturn 0; //入栈失败
}
出栈操作,同样需要指定出栈的编号,同时还需要处理指定的栈栈中元素是否为空的特殊情况
int pop(SqStack &st, int stNo, int &x){if (stNo==0){if (st.top[0]!=-1){ //验证栈是否为空x=st.elem[st.top[0]];--(st.top[0]);return 1; //出栈成功}elsereturn 0; //出栈失败}else if (stNo==1){if (st.top[1]!=maxSize){x=st.elem[st.top[1]];++(st.top[1]);return 1;}elsereturn 0; //出栈失败}elsereturn -1; //栈编号输入错误
}
判断共享栈是否是满的
int isEmpty(SqStack st){if (st.top[0]+1==st.top[1])return 1;elsereturn 0;
}
我只写了这三种基本操作,此外还可以自行添加返回栈顶元素的操作
下为完整的代码,可直接运行
#include <stdio.h>#define maxSize 5typedef struct{int elem[maxSize];int top[2];
}SqStack;//初始化
void init(SqStack &st){st.top[0]=-1;st.top[1]=maxSize;
}//入栈操作
//stNo是栈的编号,x是入栈元素
int push(SqStack &st, int stNo, int x){if (st.top[0]+1<st.top[1]){ //先判断栈是否是满的if (stNo==0){++(st.top[0]);st.elem[st.top[0]]=x;return 1; //入栈成功}else if (stNo==1){--(st.top[1]);st.elem[st.top[1]]=x;return 1;}elsereturn -1;}elsereturn 0; //入栈失败
}//出栈
int pop(SqStack &st, int stNo, int &x){if (stNo==0){if (st.top[0]!=-1){ //验证栈是否为空x=st.elem[st.top[0]];--(st.top[0]);return 1; //出栈成功}elsereturn 0; //出栈失败}else if (stNo==1){if (st.top[1]!=maxSize){x=st.elem[st.top[1]];++(st.top[1]);return 1;}elsereturn 0; //出栈失败}elsereturn -1; //栈编号输入错误
}//判断是否栈满,1为满,0为不满
int isEmpty(SqStack st){if (st.top[0]+1==st.top[1])return 1;elsereturn 0;
}//打印栈
void printStack(SqStack st){printf ("当前栈中元素是:");for (int i=0; i<=st.top[0]; i++){printf ("%d ", st.elem[i]);}for (int i=st.top[1]; i<maxSize; i++){printf ("%d ", st.elem[i]);}printf ("\n");
}int main(){SqStack st;init(st);push(st, 0, 5);push(st, 0, 2);push(st, 0, 3);push(st, 1, 6);push(st, 1, 9);push(st, 1, 8);if (isEmpty(st)){printf ("栈满!\n");}int x;pop(st, 1, x);printf ("出栈元素是:%d\n", x);printStack(st);return 0;
}
《天勤数据结构》笔记——使用两个栈实现共享栈实现(C/C++)相关推荐
- 数据结构之 顺序栈、共享栈、链栈
顺序栈.共享栈.链栈 一.思维导图: 二.栈的定义: 三.栈的特点: 四.栈的基本操作: 五.常考题型: 六.顺序栈: 1.思维导图: 2.顺序栈基本操作的实现: 1.定义栈: 2. 初始化栈:Ini ...
- C语言数据结构(大话数据结构——笔记2)第四章:栈与队列
文章目录 第四章:栈与队列(115) 栈顶与栈底,空栈,后进先出 Last in first out(LIFO结构)(117) 进栈.压栈.入栈:栈的插入操作:出栈.弹栈:栈的删除操作(118) pu ...
- 一个数组实现两个栈(共享栈)
题目: 一个数组实现两个栈. 方法1: 下标为0的位置为栈1的栈底,下标为1的位置为栈2的栈底,栈1的元素存放在下标为偶数的位置上,栈2的元素放在下标为奇数的位置上. 如上图所示的数组:若 ...
- 天勤数据结构笔记——第六章 树与二叉树(大题)
1.基础题 (1)略 (2)采用层次遍历,visit(q); 改为 count++; void level(BTNode *p,int &count){count=0;int front=re ...
- 天勤数据结构笔记——第六章 树与二叉树(代码)
二叉树的链式存储结构 typedef struct BTNode{char data;struct BTNode *lchild;struct BTNode *rchild; }BTNode; 先序遍 ...
- 数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)
目录 一.栈 (一)栈的概念 (二)栈的排列 (三)共享栈 (四)栈的常见应用 二.顺序栈的定义 三.顺序栈的初始化 四.判断顺序栈是否为空栈 五.判断顺序栈是否为满栈 六.进栈(插入操作) 七.出栈 ...
- 2022天勤考研数据结构笔记 第3章 栈和队列
2022天勤考研数据结构笔记 第3章 栈和队列(更新中) 第3章 栈和队列 3.1 结构体定义 3.2 顺序栈 3.3 链栈 3.4 栈的应用 3.5 顺序队 3.6 链队 第3章 栈和队列 栈和队列 ...
- 天勤考研数据结构笔记—栈的C语言实现
栈的基本概念 栈的定义:栈是一种只能在一端进行插入或删除操作的线性表.其中允许进行插入或删除的一端称为栈顶(top).栈顶是由一个称为栈顶指针的位置指示器(其实就是一个变量,对于顺序栈,就是数组索引, ...
- 2022天勤考研数据结构笔记 第2章 线性表
2022天勤考研数据结构笔记 第2章 线性表(更新中) 第2章 线性表 2.1 结构体定义 2.2 顺序表 2.3 单链表 2.4 双链表 2.5 循环链表 2.6 逆置问题(408重要考点) 第2章 ...
- 数据结构源码笔记(C语言):链接栈
/* 链接栈:类型和界面函数声明 */ /*链接栈:函数实现*/#include <stdio.h> #include <stdlib.h>typedef int DataTy ...
最新文章
- 转:动态链接库的全局变量问题
- 括号(打印n对括号)
- linux线程同步(5)-屏障
- CString::GetBuffer函数作用
- 雅思听力的词语练习打字!!!
- google提供的adb工具包_开源化学信息学工具包(Open Access Cheminformatics Toolkits)
- c#进阶(5)—— WCF 实现简单预订功能
- ORA-06413连接未打开的错误的原因和解决方法
- SSH网上商城:回首网上商城
- Spring官网改版后下载
- TimerTimerTask原理分析
- Java中多态的实例
- python如何读取二进制文件为图片_python之读取二进制文件
- 日语 敬体 简体 作文 对话
- 什么是物联网技术?物联网主要技术有哪些?
- 力扣刷题 DAY_61 回溯
- 美国队用计算机计算排球队员,排球理论考试题库
- python元祖封包_Python基础——解包与封包
- 【编译原理】最小化 DFA
- 介绍一种Android 平台 不需要获取imei imsi 无权限就能获取手机运营商的方法
热门文章
- matlab实现同态滤波
- LPC_2136 PLC,扩展方案,兼容西门子S7-200 CPU 224XP,兼容西门子软件
- oracle与mysql语法区别_mysql和oracle语法异同
- 商业计划书-智能导盲仗
- ProjectZomboid服务器搭建
- 基于Python的指数基金量化投资 - 指数投资技巧(二)定期不定额
- 在线图片编辑器/在线视频剪辑器/在线批量加水印网站源码
- html5 svg编辑器,HTML5 之 SVG
- vdbench数据校验翻译
- linux多线程实验实验报告,Linux多线程实验.ppt