上机3.2

2、编写一个函数SelectItem( Stack & s, int n) ,要求利用堆栈来查找n在栈中第一次出现的位置,并将该位置元素移至栈顶,同时其他元素次序不变。

注:栈类用了之前定义的

 1 //============================================================================
 2  // Name        : shangji3.2.cpp  第三次上机第二题
 3  // Author      : menglei
 4  // Version     : 2012.10.30
 5  // Copyright   : Your copyright notice
 6  // Description : Hello World in C++, Ansi-style
 7  //============================================================================
 8
 9  /**
10   * 2、编写一个函数SelectItem( Stack & s, int n) ,
11   * 要求利用堆栈来查找n在栈中第一次出现的位置,
12   * 并将该位置元素移至栈顶,同时其他元素次序不变。
13   */
14  #include <iostream>
15  using namespace std;
16
17  //template<class T>
18  class mStack{     //call a stack
19  private:
20      int size;
21      int *stackArray;
22      int top;
23  public:
24      mStack(){
25          size = 100;
26          top = -1;
27          stackArray = new int[100];
28      }
29      int pop(){
30          if(top==-1){
31              cout<<"stack is empty ,can't pop!"<<endl;
32              return NULL; //返回NULL会有问题,但编译能通过
33          }
34          top--;
35          return stackArray[top];
36      }
37      int push(int value){
38          if(top==size){
39              cout<<"stack is full ! can't push !"<<endl;
40              return -1;
41          }
42          stackArray[top++]= value;
43          return 1;
44      }
45      int  getTop(void){
46          if(top==-1){
47              cout<<"stack is empty! "<<endl;
48              return NULL;
49          }
50          return stackArray[top-1];
51      }
52      int isEmpty(){
53          if(top==-1)
54              return 1;
55          return 0;
56      }
57
58  };
59  int main() {
60      mStack m;
61      m.push(1);
62      m.push(2);
63      m.push(3);
64      m.push(4);
65      m.push(5);
66      m.push(6);
67      m.push(7);
68
69      mStack  temp;
70      int t;
71      int count = 1;
72      t= m.pop();
73      while(t!=3)  //比如查找3
74      {
75          //cout<<"t="<<t<<endl;
76          temp.push(t);
77          t = m.pop();
78          count++;
79      }
80      //找到了
81      int tempN = t;
82      cout<<"元素3的距离栈顶的位置为:"<<count<<endl;
83      while(!temp.isEmpty()){
84          m.push(temp.pop());
85      }
86      m.push(tempN);
87      //下面是检验
88      cout<<"改变后的栈的顺序为:"<<endl;
89      while(!m.isEmpty()){
90          cout<<m.getTop()<<endl;
91          m.pop();
92      }
93      return 0;
94  }
95  

运行结果:

转载于:https://www.cnblogs.com/menglei/archive/2012/10/30/2746560.html

【数据结构上机练习】5.栈的简单操作(2)相关推荐

  1. 数据结构单链表的创建以及简单操作

    在数据结构中: 目录 一.数据节点类型结构体封装 二.创建单链表 1.创建链表 2.头部插入 3.遍历链表 4.尾部插入 5.释放链表 链表可以解决顺序表无法开辟连续空间的问题,大大提高了内存的利用率 ...

  2. 数据结构上机应用:栈和队列

    问题描述: 某单位停车场共有n个车位,是一个一端封闭的只有一排的狭长通道,车辆只能由左向右依次停放,最右端有一个大门供车辆出入.当车位未满时,车辆可以进入并停在最后一辆车的后面:当车位已满时,车辆需在 ...

  3. 【数据结构】栈的简单理解以及对栈的基本操作

    一.静态栈的简单操作 先来简单的了解一下栈 1.栈:一种特殊的线性表,其实只允许在固定的一端进行插入或删除操作.进行数据插入和删除的一端称为栈顶,另一端称为栈底.不含任何元素的栈称为空栈,栈又称为 后 ...

  4. 顺序表输入栈元素c语言,C语言数据结构之栈简单操作

    C语言数据结构之栈简单操作 实验: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍 ...

  5. 数据结构——栈与队列操作(用栈模拟队列)

    [栈与队列操作] 问题描述:假设有两个长度相同的栈 S1,S2,已知以下入栈.出栈.判栈满和判栈空操作: void Push(S,x); Elemtype Pop(S); bool StackFull ...

  6. 基于java的数据结构学习——数组实现的栈以及简单应用C++实现

    基于java的数据结构学习--数组实现的栈以及简单应用的 C++ 实现 源码: // // Created by PC-Saw on 2019/1/3. //#ifndef DATA_STRUCTUR ...

  7. 数据结构——树的简单操作集合

    非常多数据结构的书上解说数据机构时都是採用伪代码实现.事实上感觉蛮不直观的.所以对于全部的数据结构操作我都将其用C实现一遍. 树是学习二叉树的基础,也是后面理解B树.B+树的等树的基础,以下就给出树的 ...

  8. 基于java的数据结构学习——数组实现的栈以及简单应用

    栈 Stack 栈是一种线性结构 相比数组,栈对应的操作是数组的子集 只能从一端添加元素,也只能从一端取出元素 这一端称为栈顶 栈是一种后进先出的数据结构 栈的应用 无处不在的Undo操作(撤销) 括 ...

  9. 【1138】数据结构上机测试2-1:单链表操作A(顺序建表+删除节点)(SDUT)

    数据结构上机测试2-1:单链表操作A Time Limit: 1000ms   Memory limit: 4096K  有疑问?点这里^_^ 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头 ...

最新文章

  1. Java数据结构与算法(第二章数组)
  2. Cordova 本地项目创建方法
  3. SQL SERVER 子查询的用法
  4. 德语语言文学考研c1,2015-2016同济大学德语语言文学初试考研经验(下)
  5. 大数据能否力挽国足败落狂澜?
  6. 服务器双向认证 原理,什么叫SSL双向认证 SSL双向认证过程是怎样的
  7. 自己的利益,还是用户的名义?
  8. CVPR | 旷视提出Meta-SR:单一模型实现超分辨率任意缩放因子
  9. [py]py常用模块小结
  10. Android自定义View之刻度尺
  11. Python工具箱系列(十一)
  12. 腾讯全套人力资源管理资料大全(职位能力模型图+人力资源管理+招聘体系+培训体系+薪酬绩效+员工职业发展,共174M)
  13. 贪心算法-会议安排问题
  14. 转 解决打印机无法打印的方法
  15. Linux命令之md5sum的作用以及使用方法(md5是什么?)
  16. 个人微信公众号申请流程
  17. MATLAB App Designer入门实战(一)
  18. 浅谈语音助手的对话管理与策略制定
  19. pythonQQ机器人系列:使用requests实现QQ机器人聊天(1-0)
  20. Navicat for mysql的相关教程

热门文章

  1. mybatisplus page排序_PostgreSQL使用WITH xxx AS()查询,使用Page中的OrderItem排序,会把WITH xxx AS()这段SQL忽略导致报错...
  2. linux dev input使用消失_Linux驱动04 | 启动分析之根文件系统
  3. 易混单词 expect VS except
  4. 非资深玩家留言频率限制(1024秒限制)
  5. html——name与value的使用
  6. ArcGIS制图表达Representation-制图表达原理
  7. 深入玩转K8S之使用kubeadm安装Kubernetes v1.10以及常见问题解答
  8. 7个现象告诉你手游圈为什么会有寒冬
  9. TweenLite中文帮助手册
  10. 无缝世界网游服务器架构的设计思路