用栈实现插入排序时,我们先将存放该数据的栈排序到另一个栈中,最后在将另外一个栈的内容倒放到当前栈中。图如下:

实现:

#pragma once

template <typename E> class AStack  {
private:
int maxSize;              // Maximum size of stack
int top;                  // Index for top element
E *listArray;          // Array holding stack elements

public:
AStack(int size = 20)   // Constructor
{
maxSize = size; top = 0; listArray = new E[size];
}

~AStack() { delete[] listArray; }  // Destructor

void clear() { top = 0; }           // Reinitialize

void push(const E& it) {         // Put "it" on stack
listArray[top++] = it;
}

E pop() {                // Pop top element
return listArray[--top];
}

const E& topValue() const {     // Return top element
return listArray[top - 1];
}

int length() const { return top; }  // Return length

void insertSort()
{
AStack<int>L1;
while (length()>0)    //when this is empty,circle break.
{
E element = pop();
int count = 0;     // to record how many element in this stack, which has been pushed into.
if (L1.length() == 0)   //if L1 is empty, push element into 12.
{
L1.push(element);
}
else
{
if (element > L1.topValue())
L1.push(element);
else                       
{
while (element < L1.topValue()&&L1.length()!=0)
{
push(L1.pop());   //make L1's elements into the current stack when they are minor to the element.
count++;
}
L1.push(element);
while (count != 0)
{
L1.push(pop());
count--;
}
}
}
}

for (int i = 0; L1.length() > 0; i++)  
push(L1.pop());
}

};

main函数:

#include"AStack.h"
#include<iostream>
using namespace std;
int main()
{
AStack<int>L1;
L1.push(2);
L1.push(1);
L1.push(9);
L1.push(5);
L1.push(7);
L1.push(11);
L1.push(35);
L1.push(0);
L1.insertSort();
while (L1.length() > 0)
cout << L1.pop() << endl;
}

截屏:

用两个栈(C++)实现插入排序相关推荐

  1. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...

    多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...

  2. 剑指offer:面试题09. 用两个栈实现队列

    题目:用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有 ...

  3. 面试题6:用两个栈实现队列

    思路:设置两个栈stack1和stack2,stack1实现入队列功能,stack2实现出队列功能. (1)入队列:入栈stack1 (2)出队列:若stack2不空,则直接弹出stack2中的栈顶元 ...

  4. 剑指offer_第5题_用两个栈实现队列

    题目描述 用两个栈来实现一个队列 完成队列的Push和Pop操作 队列中的元素为int类型 理解 关于栈 什么是栈 栈的抽象数据类型 Python实现栈 关于队列 什么是队列 队列抽象数据类型 Pyt ...

  5. 化栈为队(两个栈来实现一个队列)

    实现一个MyQueue类,该类用两个栈来实现一个队列. 示例: MyQueue queue = new MyQueue();queue.push(1); queue.push(2); queue.pe ...

  6. 栈与队列2——两个栈组成队列

    题目 编写一个类,用两个栈实现一个队列,并实现队列的基本操作(add,poll,peek) 思路 一个栈stackPush作为正常压入的栈,一个栈stackPop作为弹出的栈,将stackPush中的 ...

  7. c语言Inqueue函数用法,C语言用两个栈实现队列(完整版)

    队列是一种 先进先出(first in - first out, FIFO)的数据结构,队列中的元素都从后端(rear)入队(push),从前端(front)出队(pop). 实现队列最直观的方法是用 ...

  8. [剑指offer] 用两个栈实现队列

    本文首发于我的个人博客:尾尾部落 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路 两个栈 stack1 和 stack2: push 动作都在 ...

  9. 《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java

    <LeetCode力扣练习>剑指 Offer 09. 用两个栈实现队列 Java 一.资源 题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 de ...

  10. 【剑指offer-Java版】07用两个栈实现队列

    两个栈实现一个队列:stack_1 stack_2 入队操作:直接入stack_1 出队操作:如果stack_2不为空,那么从其中弹出一个作为出队元素,否则将stack_1元素全部依次压入stack_ ...

最新文章

  1. offsetof使用小结
  2. 就是好骑!骑ofo小黄蜂和舒畅早晨say hi,跟闹心堵车say bye
  3. 92. Leetcode 63. 不同路径 II (动态规划-路径规划)
  4. VSCode来绘制流程图真是得心应手
  5. 8086键盘输入实验——《x86汇编语言:从实模式到保护模式》读书笔记07
  6. 机器学习中树模型算法总结之 决策树(下)
  7. 编写javascript、Jquery的String.format();
  8. m40型工业机器人_从工业机器人编程及应用到数控机床的安装维修,一次都学习了...
  9. 快切-开源中文css框架之纯css透明
  10. mysql 连续签到天数_瑞士军刀Redis(二)用户签到
  11. SQL Server 2005全文索引(full text search)
  12. Java实现坦克大战(源码全)
  13. SVN commit时,提示“remains in conflict”错误:
  14. Halcon的常见错误
  15. android+微信支付
  16. 服务无法注册到注册中心解决
  17. python zen_Python彩蛋--zen of python
  18. 实用技巧:六招教你去掉图片上的文字
  19. elementUI angular适合做H5吗
  20. 关于焦点小组(Focus Group)访谈法

热门文章

  1. 屠龙之路_战胜View对DataBase猛烈进攻_ThirdDay
  2. Leonbao:MapKit学习笔记
  3. iOS - UITableViewCell Custom Selection Style Color
  4. 《windows核心编程》 17章 内存映射文件
  5. pku 3020 Antenna Placement
  6. poj2912(带权并查集+枚举)
  7. vue中v-for循环如何将变量带入class的属性名中
  8. AOP统一处理请求日志
  9. zhlan--Python中的字典遍历方法 字典取值
  10. NVIDIA Jetson TK1学习与开发(八):图文详解OpenGL在Jetson TK1上的安装和使用