数组中的两个栈

将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别位于数组的两端。 当第0号栈的栈顶指针top[0]等于-1时该栈为空;当第1号栈的栈顶指针top[1]等于m时,该栈为空。 将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别位于数组的两端。 当第0号栈的栈顶指针top[0]等于-1时该栈为空;当第1号栈的栈顶指针top[1]等于m时,该栈为空。 两个栈均从两端向中间增长。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。 注意 左栈是通常意义的栈,右栈的入栈操作(栈顶指针减1),出栈操作(栈顶指针加1) #include <stdio.h&gt... 阅读详情
  • PTA上关于栈的一道题,做完你就可以变得更强,妈妈再也不怕我被栈难倒了。

原题链接

6-1 Two Stacks In One Array (20 分)

Write routines to implement two stacks using only one array. Your stack routines should not declare an overflow unless every slot in the array is used.

Format of functions:

Stack CreateStack( int MaxElements );
int IsEmpty( Stack S, int Stacknum );
int IsFull( Stack S );
int Push( ElementType X, Stack S, int Stacknum );
ElementType Top_Pop( Stack S, int Stacknum );

where int Stacknum is the index of a stack which is either 1 or 2; int MaxElements is the size of the stack array; and Stack is defined as the following:

typedef struct StackRecord *Stack;
struct StackRecord  {
    int Capacity;       /* maximum size of the stack array */
    int Top1;           /* top pointer for Stack 1 */
    int Top2;           /* top pointer for Stack 2 */
    ElementType *Array; /* space for the two stacks */
}

Note: Push is supposed to return 1 if the operation can be done successfully, or 0 if fails. If the stack is empty, Top_Pop must return ERROR which is defined by the judge program.

Sample program of judge:

#include <stdio.h>
#include <stdlib.h>
#define ERROR 1e8
typedef int ElementType;
typedef enum { push, pop, end } Operation;

typedef struct StackRecord *Stack;
struct StackRecord  {
    int Capacity;       /* maximum size of the stack array */
    int Top1;           /* top pointer for Stack 1 */
    int Top2;           /* top pointer for Stack 2 */
    ElementType *Array; /* space for the two stacks */
};

Stack CreateStack( int MaxElements );
int IsEmpty( Stack S, int Stacknum );
int IsFull( Stack S );
int Push( ElementType X, Stack S, int Stacknum );
ElementType Top_Pop( Stack S, int Stacknum );

Operation GetOp();  /* details omitted */
void PrintStack( Stack S, int Stacknum ); /* details omitted */

int main()
{
    int N, Sn, X;
    Stack S;
    int done = 0;

    scanf("%d", &N);
    S = CreateStack(N);
    while ( !done ) {
        switch( GetOp() ) {
        case push: 
            scanf("%d %d", &Sn, &X);
            if (!Push(X, S, Sn)) printf("Stack %d is Full!\n", Sn);
            break;
        case pop:
            scanf("%d", &Sn);
            X = Top_Pop(S, Sn);
            if ( X==ERROR ) printf("Stack %d is Empty!\n", Sn);
            break;
        case end:
            PrintStack(S, 1);
            PrintStack(S, 2);
            done = 1;
            break;
        }
    }
    return 0;
}

/* Your function will be put here */

Sample Input:

5
Push 1 1
Pop 2
Push 2 11
Push 1 2
Push 2 12
Pop 1
Push 2 13
Push 2 14
Push 1 3
Pop 2
End

Sample Output:

Stack 2 is Empty!
Stack 1 is Full!
Pop from Stack 1: 1
Pop from Stack 2: 13 12 11

 

在一个数组中实现两个堆栈 4-7 在一个数组中实现两个堆栈   (20分) 本题要求在一个数组中实现两个堆栈。 函数接口定义: Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int Tag ); ElementType Pop( Stack S, int Tag ); 其中Tag是堆栈编号,取1或2;Max 阅读详情

相关推荐

算法导论 顺序双向栈——两个栈共享同一存储空间

双向栈——两个栈共享同一存储空间1. 什么是双向栈? 算法导论原题: 10.1-2 Explain how to implement two stacks in one array A[1..n] in such a way that neither stack overflows unless the total number of elements in both stacks

梦幻DUO的游戏开发之路 4570

一个数组实现双栈

#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define ERROR 1e8 typedef int ElementType; typedef enum { push, pop, end } Operation; typedef int Position; struct SNode { ElementType *Data; Po...

weixin_40206065的博客 581

关于栈和队列常见笔试面试题

关于栈和队列相关笔试面试题:1.入栈、出栈、取栈中最小元素的时间复杂度0(1) 2.使用两个栈实现一个队列 3.使用两个队列实现一个栈 4.判断字符串入栈出栈的合法性,即判定字符串是否按照入栈出栈顺序 5.一个数组实现两个栈(共享栈)

谢广涛的博客 485

在一个数组中实现两个堆栈 (20 分)

在一个数组中实现两个堆栈 (20 分) 本题要求在一个数组中实现两个堆栈。 函数接口定义: Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int Tag ); ElementType Pop( Stack S, int Tag ); 其中Tag是堆栈编号,取1或2;MaxSize堆栈数组的规模;Stack结...

qq_43720467的博客 2759

Python实战:如何用高德API批量获取POI数据(附完整代码)

本文详细介绍了如何使用Python通过高德API批量获取POI数据,包括API基础准备、核心功能模块设计、高级功能实现及实战应用案例。文章提供了完整代码示例,帮助开发者高效解决商业网点分析、公共设施规划等实际项目中的数据采集需求。

stem5的博客 328

自定义css属性实现渐变边框动画

自定义cs属性实现渐变边框动画

lemon的博客 1876

6-18 Two Stacks In One Array(20 point(s))

6-18 Two Stacks In One Array(20 point(s)) Write routines to implement two stacks using only one array. Your stack routines should not declare an overflow unless every slot in the array is used.

codeswarrior的博客 1356

Dell R730安装Windows Server 2008 R2

一、RAID驱动准备  在安装Windows server2008 R2操作系统时,如果没有发现硬盘,请将下面的阵列卡驱动先解压(在下载的.exe文件,双击点下一步会自动解压),解压后把那文件夹复制到U盘中。阵列卡 PERC9 H330 - H730 - H730P - H830 Controllers for Windows Server 2008 R2二、系统安装方法方法一:光盘安装  ①请您...

MarshLin 2万+

剑指offer(一)用两个栈实现队列+数组中重复的数字+二维数组中的查找

1.用两个栈实现队列 2.数组中重复的数字

ice_tomato的博客 191

CCS软件仿真插件移植避坑指南:从CCS5.5到7.4的完整流程

本文详细介绍了将CCS软件仿真插件从CCS5.5迁移至CCS7.4的完整流程与避坑指南。针对TMS320F28335等C2000系列芯片,重点解析了仿真核心文件、配置数据库、连接定义及驱动文件的移植步骤,并通过两个实战Demo验证了移植后仿真环境的可用性,帮助开发者在无硬件条件下继续高效进行算法验证与调试。

defi6farmer的博客 461

【RK3588 NPU性能调优实战】多线程异步推理YOLOv5,榨干6TOPS算力

本文详细解析了如何在RK3588 NPU上通过多线程异步推理优化YOLOv5目标检测性能,实现6TOPS算力的最大化利用。通过线程池设计、流水线化帧处理及避开内存带宽瓶颈等技巧,将NPU利用率从30%提升至82%,帧率显著提高至61.2FPS。文章还提供了环境配置、代码实现及性能对比数据,助力开发者高效部署AI模型。

weixin_29034963的博客 343

算法:剑指offer-python(一):二维数组中的查找,从尾到头打印链表、重建二叉树,两个队列实现一个栈,两个栈实现队列,旋转数组中的最小数

一、二维数组中的查找 # -*- coding:utf-8 -*- class Solution: # array 二维列表 def Find(self, target, array): row=0 col=len(array[0])-1 if array==None: return False ...

weixin_41108334的博客 323

我写了一个自动识别火车车厢位置的算法【lidar点云识别】

我写了一个自动识别火车车厢位置的算法【lidar点云识别】

qq_43212290的博客 800

Python-剑指offer(5,6)用两个栈实现队列,旋转数组中的最小数字

题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 环境:Python2.7.3 思路:建立两个栈A和B,栈A中用append函数实现push操作,对于栈B,当其为空时,将栈A中的元素执行POP操作并存入B中,当B不为空时,对B直接执行POP操作即可。 # -*- coding:utf-8 -*- class Solution: def __...

二哥为啥不像程序员? 241

TC3XX - MCAL知识点(二十九):FLS MCAL配置及代码实战(英飞凌DFLASH)

FLS驱动程序为DFlash 0的初始化、读取、写入和擦除提供了定义良好的配置和标准服务。除此之外,我们还提供一些非autosar服务示例 Fls_17_Dmu_CompareWordsSync、Fls_17_Dmu_CancelNonEraseJobs、Fls_17_Dmu_VerifyErase,LFls_17_Dmu_VerifySectorErase、Fls_17_Dmu_GetNotifCaller等。用户通过FLS驱动程序获得对底层DFlash0的封装访问。

梦想技术家 2365

手把手教你学PCIE--系统内存管理:GART(Graphics Address Remapping Table)的典型用途详解

GART(图形地址重映射表)是GPU的核心组件,主要用于地址映射转换。其典型用途分为物理模式和虚拟模式两类:在物理模式下,GART将GPU虚拟地址映射到分散的物理内存,支持DMA连续访问非连续内存块,适用于GPU渲染纹理采样和AI推理数据搬运等场景;在虚拟模式下,GART配合IOMMU实现多级映射,将GPU虚拟地址转换为虚拟机物理地址再映射到宿主机物理地址,确保多租户隔离,应用于云服务器GPU共享和容器化AI训练等虚拟化环境。两种模式分别优化了高性能计算场景和虚拟化场景的需求。

MHD0815的博客 367

力扣——剑指offer 09. 用两个栈实现队列 80.删除有序数组中的重复项Ⅱ

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

m0_74943766的博客 582

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JZ9 用两个栈实现队列 JZ11 旋转数组的最小数字 Leetcode 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项

有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。

2401_83430255的博客 839

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

10.1-2 说明如何用一个数组A[1..n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢,注意PUSH和POP操作的时间应为O(1)。...

#include "iostream" #include "string" using namespace std; int A[9]={-1,1,2,3,4,5,6,7,8}; int top_s1=0,top_s2=9; bool PUSH(string s,int x){ if(top_s1+1==top_s2) return false; ...

weixin_34198453的博客 243

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

一个数组实现两个栈

s[max_size]=0 top1=0; top2=max_size; bool isEmpty(int index) { if(index == 0 && top1 < 1) return true; if(index == 1 && top2 > len) return true; return false; } void push(int index, int data) { //已满 if(top1 > top2) ret.

weixin_45949933的博客 165

剑指offer(03~12):数组中重复的数字、二维数组中的查找、替换空格、从尾到头打印链表、重建二叉树、用两个栈实现队列、斐波那契额数列、青蛙跳台阶、旋转数组的最小数字、矩阵中的路径

剑指offer(03~12):数组中重复的数字、二维数组中的查找、替换空格、从尾到头打印链表、重建二叉树、用两个栈实现队列、斐波那契额数列、青蛙跳台阶、旋转数组的最小数字、矩阵中的路径

m0_60631323的博客 418

剑指offer:用两个栈实现队列+包含min函数的栈+栈的压入,弹出序列+合并两个有序数组

1.用两个栈实现队列 当Stack2不为空时,在stack2的栈顶元素是最先进入队列的元素,可以弹出。当stack2为空时,我们把stack1中的元素逐个弹出并压入stack2. class Solution { public: void push(int node) { stack1.push(node); } int pop() { if(stack2.size()<=0){//这句是必不可少的,试想如果没有这个条件判断,则会发生st

ice_tomato的博客 156

【栈的应用】奇偶分类

2) 先将st1中的所有元素(奇数元素)退栈,放到数组a中,并覆盖原有位置的元素,再将st2的所有元素(偶数元素)退栈,放到数组a中并覆盖原有位置的元素。由于一个数组中既有奇数,又有偶数,因此,首先需要采取的是将数组中的元素进行奇偶分类。可以用两个栈分别存储奇数和偶数。所以本算法的功能是利用两个栈将数组a中的所有奇数元素放到所有偶数前面。1) 扫描数组a,将所有奇数进到s1栈中,将所有偶数进到s2栈中。设计一个算法将所有奇数元素放到偶数元素前面。接下来用两个栈分别存储奇数和偶数。首先有栈的基本算法。

weixin_73366312的博客 428

《剑指Offer》刷题之数组中只出现一次的两个数字

《剑指Offer》刷题之数组中只出现一次的两个数字 我不知道将去向何方,但我已在路上! 时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! 题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 示例: 示例 1 : 输入:[1,4,1,6] 返回值:[4,6] 说明:返回的结果中较小的数排在前面 代码1: class Solution: def FindNumsAppearOnce(self

胡萝卜 94

剑指offer(二) 重建二叉树+用两个栈实现队列+旋转数组的最小数字

记录并复习一下剑指offer的部分题型~ 文章目录重建二叉树用两个栈实现队列旋转数组的最小数字 重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 首先给我们的条件是一个前序遍历的数组和中序遍历的数组。需要注意的是中序遍历的数组,要知道前序遍历的第一个值,就是中序遍历的中间值。所以我们可以通过前序遍

LinJy 232
上一篇: C语言内存分配
下一篇: 循环队列
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值