共享栈为空的状态,左右两栈的栈顶指针都在两端,也就是各自栈的栈底

代码当中测试栈满的时候的状态图

 共享栈的数据结构

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. 数据结构之 顺序栈、共享栈、链栈

    顺序栈.共享栈.链栈 一.思维导图: 二.栈的定义: 三.栈的特点: 四.栈的基本操作: 五.常考题型: 六.顺序栈: 1.思维导图: 2.顺序栈基本操作的实现: 1.定义栈: 2. 初始化栈:Ini ...

  2. C语言数据结构(大话数据结构——笔记2)第四章:栈与队列

    文章目录 第四章:栈与队列(115) 栈顶与栈底,空栈,后进先出 Last in first out(LIFO结构)(117) 进栈.压栈.入栈:栈的插入操作:出栈.弹栈:栈的删除操作(118) pu ...

  3. 一个数组实现两个栈(共享栈)

    题目:   一个数组实现两个栈. 方法1:   下标为0的位置为栈1的栈底,下标为1的位置为栈2的栈底,栈1的元素存放在下标为偶数的位置上,栈2的元素放在下标为奇数的位置上.   如上图所示的数组:若 ...

  4. 天勤数据结构笔记——第六章 树与二叉树(大题)

    1.基础题 (1)略 (2)采用层次遍历,visit(q); 改为 count++; void level(BTNode *p,int &count){count=0;int front=re ...

  5. 天勤数据结构笔记——第六章 树与二叉树(代码)

    二叉树的链式存储结构 typedef struct BTNode{char data;struct BTNode *lchild;struct BTNode *rchild; }BTNode; 先序遍 ...

  6. 数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)

    目录 一.栈 (一)栈的概念 (二)栈的排列 (三)共享栈 (四)栈的常见应用 二.顺序栈的定义 三.顺序栈的初始化 四.判断顺序栈是否为空栈 五.判断顺序栈是否为满栈 六.进栈(插入操作) 七.出栈 ...

  7. 2022天勤考研数据结构笔记 第3章 栈和队列

    2022天勤考研数据结构笔记 第3章 栈和队列(更新中) 第3章 栈和队列 3.1 结构体定义 3.2 顺序栈 3.3 链栈 3.4 栈的应用 3.5 顺序队 3.6 链队 第3章 栈和队列 栈和队列 ...

  8. 天勤考研数据结构笔记—栈的C语言实现

    栈的基本概念 栈的定义:栈是一种只能在一端进行插入或删除操作的线性表.其中允许进行插入或删除的一端称为栈顶(top).栈顶是由一个称为栈顶指针的位置指示器(其实就是一个变量,对于顺序栈,就是数组索引, ...

  9. 2022天勤考研数据结构笔记 第2章 线性表

    2022天勤考研数据结构笔记 第2章 线性表(更新中) 第2章 线性表 2.1 结构体定义 2.2 顺序表 2.3 单链表 2.4 双链表 2.5 循环链表 2.6 逆置问题(408重要考点) 第2章 ...

  10. 数据结构源码笔记(C语言):链接栈

    /* 链接栈:类型和界面函数声明 */ /*链接栈:函数实现*/#include <stdio.h> #include <stdlib.h>typedef int DataTy ...

最新文章

  1. 转:动态链接库的全局变量问题
  2. 括号(打印n对括号)
  3. linux线程同步(5)-屏障
  4. CString::GetBuffer函数作用
  5. 雅思听力的词语练习打字!!!
  6. google提供的adb工具包_开源化学信息学工具包(Open Access Cheminformatics Toolkits)
  7. c#进阶(5)—— WCF 实现简单预订功能
  8. ORA-06413连接未打开的错误的原因和解决方法
  9. SSH网上商城:回首网上商城
  10. Spring官网改版后下载
  11. TimerTimerTask原理分析
  12. Java中多态的实例
  13. python如何读取二进制文件为图片_python之读取二进制文件
  14. 日语 敬体 简体 作文 对话
  15. 什么是物联网技术?物联网主要技术有哪些?
  16. 力扣刷题 DAY_61 回溯
  17. 美国队用计算机计算排球队员,排球理论考试题库
  18. python元祖封包_Python基础——解包与封包
  19. 【编译原理】最小化 DFA
  20. 介绍一种Android 平台 不需要获取imei imsi 无权限就能获取手机运营商的方法

热门文章

  1. matlab实现同态滤波
  2. LPC_2136 PLC,扩展方案,兼容西门子S7-200 CPU 224XP,兼容西门子软件
  3. oracle与mysql语法区别_mysql和oracle语法异同
  4. 商业计划书-智能导盲仗
  5. ProjectZomboid服务器搭建
  6. 基于Python的指数基金量化投资 - 指数投资技巧(二)定期不定额
  7. 在线图片编辑器/在线视频剪辑器/在线批量加水印网站源码
  8. html5 svg编辑器,HTML5 之 SVG
  9. vdbench数据校验翻译
  10. linux多线程实验实验报告,Linux多线程实验.ppt