队列

  1. 如果希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分队头指针front和队尾指针rear相同时的队列状态是“空”还是“满”,试编写相应的入队和出队算法

分析:只在队列的结构里设置一个tag,当有元素入队的时候tag为1,当有元素出队的时候tag为0。初始时tag为0。

bool Enqueue(Elemtype x,SqlQueue &Q){if(Q.rear == Q.front && Q.tag == 1)return false;
else{Q.data[Q.rear] = x;Q.rear = (Q.rear+1)%Maxsize;Q.tag = 1;return true;
}
}
bool Dequeue(Elemtype x,SqlQueue &Q){if(Q.rear==Q.front && Q.tag == 0)return false;
else{x = Q.data[Q.front];Q.front -( Q.front +1)%Maxsize;Q.tag=0;return true;
}}
  1. Q是一个队列,S是一个空栈,实现将队列中的元素逆置的算法
    分析:很简单,把队列中的元素入栈,然后从栈中弹出再进入队列即可
void Inverser(Stack S,Queue Q){while(!QueueEmpty(Q)){Elemtype x;Dequeue(Q,x);Push(S,x);
}
while(!StackEmpty(S)){Elemtype x;Pop(S,x);Enqueue(Q,x);
}
}
  1. 利用两个栈S1、S2来模拟一个队列,已知栈的4个运算定义如下:
Push(S,x);
Pop(S,x);
StackEmpty(S);
StackOverflow(S);

如何利用栈的运算来实现该队列的三个运算

Enqueue;
Dequeue;
QueueEmpty;

分析:将两个栈底对底链接起来
如果是出队操作,使用S1入栈,然后将S1中的元素弹出送入S2,从S2中再弹出元素;
(出队操作使用S2出栈表示,当S2当前为null的时候将S1中的元素全部送入S2中,然后再进行出栈操作)
如果是入栈操作,使用S2出栈,然后将S2中的元素弹出送入S1,从S1中再送入元素
(入队操作使用S1入栈表示,如果S1满,必须先保证S2为空,将S1当前的全部元素送入S2然后再入栈S1)

bool Enqueue(Stack &S1,Stack &S2,Elemtype e){if (StackOverflow(S1)&&StackEmpty(S2)){//如果S1已经满了,但是S2是空的while(!StackEmpty(S1)){Elemtype x;Pop(S1,x);Push(S2,x);}Push(S1,e);return true;
}
if(!StackOverflow(S1)){Push(S1,e);return true;
}
return false;
}bool Dequeue(Stack &S1,Stack &S2,Elemtype e)
{if(StackEmpty(S2)&&!StackEmpty(S1))
{while(!StackEmpty(S1)){Elemtype x;
Pop(S1,x);
Push(S2,x);
}
Pop(S2,e);
return true;
}
//if(StackEmpty(S1)&&StackEmpty(S2))
//return false;
//如果要是真的有这个判断的话是具体使用的时候错误的提示信息不同,这里都是返回false就作区分了
if(!StackEmpty(S2))
{Pop(S2,e);return true;
}
return false;
}bool QueueEmpty(Stack S1,Stack S2){if(StackEmpty(S1)&&StackEmpty(S2))return true;
elsereturn false;
}

栈和队列的应用

  1. 铁道车厢调度(两侧铁道均为单向行驶道,火车调度站有一个用于调度的“栈道”)火车调度站的入口处有n节硬座和软座车厢(分别以H和S表示)等待调度,试编写算法,输出对这n节车厢进行调度的操作(即入栈或出栈操作)序列,以使所有的软座车厢都被调整到硬座车厢中之前。
    分析:很明显调度的栈道就是FIFO的栈,利用栈的实现序列重排。当前的所有硬座车厢都进入栈(有一个判断当前车是硬座还是软座)
void Train_Arrange(char *train){char *p=train,*q=train,c;
stack s;
InitStack(S);
while(*p){if(*p=='H')Push(s,*p);
else*(q++)=*p;p++;
}
while(!StackEmpty(s)){Pop(s,c);
*(q++)=c;
}
}
  1. 利用一个栈实现以下递归函数的非递归计算:
Pn= 1                        n=0= 2x                       n=1= 2xPn-1(x)-2(n-1)Pn-2(x)  n>1

  1. 某汽车轮渡口,过江渡船每次能载10辆车过江。过江车辆分为客车类和货车类,上渡船有如下规定:同类车先到先上渡船;客车先于货车上渡船,且每上4辆客车,才允许放上一辆货车;若等待客车不足4辆,则以货车代替;若无货车等待,允许客车都上船。试设计一个算法模拟渡口管理。
    分析:

    数据结构(二)栈和队列练习题相关推荐

    1. 覃超数据结构(二) 栈和队列

      栈和队列 理论讲解 栈,或者堆栈 队列 面试题 20.有效的括号valid-parentheses 232.用栈实现队列implement-queue-using-stacks 225.用队列实现栈i ...

    2. 实习二 栈、队列和递归算法设计 (题目:停车场管理 )

      一.需求分析 1.每一组输入数据包括:汽车"到达"或"离去"信息.汽车牌照号码以 及到达或离去的时刻. 2.输出信息:若是车辆到达,则输出汽车在停车场内或便道上 ...

    3. 12.18栈、队列练习题

      12.18栈.队列练习题 要求: 栈和队列是线性数据结构的代表,结构简单,易于理解. 1.Noi网站上的必须全做完. 2.codevs上栈和队列的所有等级题全部做 3.线性结构中有个知识点是哈希,12 ...

    4. 【数据结构】栈、队列、堆的python实现

      [数据结构]栈.队列.堆的python实现 一.栈的python实现 1.1.栈的列表实现方法 1.2.用双向队列模拟栈 二.队列的python实现 2.1.队列的列表实现 2.2.使用deque实现 ...

    5. C语言【数据结构】栈和队列【OJ题(C++)、选择题】

      目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...

    6. 数据结构~07.栈和队列的基本概念

      数据结构~07.栈和队列的基本概念 本文是上一篇文章的后续,详情点击该链接~ 栈的定义: 栈是一种只能在一端进行插入或删除的线性表.其中,允许插入或删除的一端为栈顶(TOP).栈顶由一个称为栈顶指针的 ...

    7. 10.数据结构:栈和队列

      大家好,我王有志又回来啦.关注王有志,回复DSA获取数据结构和算法学习资源. 最近被全链路优化搞得焦头烂额,等抽出时间来和大家分享下我司正在做的"全面提速工程". 今天我们来学习线 ...

    8. 【数据结构】栈与队列区分push pop offer poll containsKey put等

      目录 前言 正文 队列 栈 map集合 前言 算法中经常会用到栈和队列等数据结构 但是经常弄混他们的进与取的代码算法 此文主要是做一个区分度 用法以及注意事项详情可看我之前的文章 [数据结构]栈和队列 ...

    9. 数据结构习题——栈和队列(二)

      第3章  栈和队列    一.填空题 1.  线性表.栈和队列都是 线性 结构,可以在线性表的 任何 位置插入和删除元素:对于栈只能在 栈顶 插入和删除元素:对于队列只能在 队尾 插入和 队头 删除元 ...

    最新文章

    1. 开启灯光就是近光吗_保时捷Macan大灯改装技术,东莞专业豪车灯光改装修复。保时捷改LED大灯...
    2. 如何理解H264 编码
    3. SOA 案例研究:SOA 设计
    4. 多层神经网络Java代码800行
    5. java 生成dump_java dump文件怎么生成和分析-JMAP用法详解
    6. java定时任务框架elasticjob详解
    7. VMware 在ubuntu-18.04.2安装搜狗输入法
    8. iOS之深入解析数组遍历的底层原理和性能分析
    9. 疯狂ios讲义之使用路径
    10. 中国恒大:正接触独立第三方投资者
    11. websocket包解析
    12. C语言及程序设计初步例程-42 将数据输出到文本文件
    13. PuTTY 'modmul()' 函数缓冲区下溢漏洞(CVE-2013-4206)
    14. 单台服务器最大支持多少连接数
    15. STM 贴片机流程记录
    16. matlab求函数偏导
    17. 计算机提示应用程序无法启动,电脑应用程序无法正常启动提示0x000007b怎么办?...
    18. 不是所有国产软件都像360一样流氓!这些良心国产软件不该被埋没
    19. 首支完全由 AI 创作的歌曲《未来之歌》发布!对于未来,你方了吗?
    20. 【自动化】手把手教你一个1秒钟归纳整理海量文件的python小技巧

    热门文章

    1. 智能边缘计算设备介绍
    2. CURL 命令行下载工具
    3. JSP中的源代码泄漏问题
    4. 安装VS2003出现“FrontPage 2000 WEB 扩展客户端”安装失败时
    5. 使迅雷超速的六个超级技巧
    6. 【web++_第四阶段_精美网页设计专题篇_1】
    7. java poker_Java超级高手成长之路!一个Java编写的斗地主游戏
    8. 什么情况?苹果把办公室建到了黑莓软件部门后院
    9. 神界计算机丢失msvcp120.dll,修复:Win10系统msvcp120.dll丢失了
    10. getElementsByTagName(“div“).getElementsByTagName(“p“)会报错