03.队列

 1 public class DecConvert
 2     {
 3         //N为需进行转换的数字,D为转换成的进制
 4         public   static string  Convert(int N,int D)
 5         {
 6             if (D<2||D>16)
 7             {
 8                 throw new ArgumentOutOfRangeException("D","只支持2、8、10、16进制的转换!");
 9             }
10             MyStack stack = new MyStack();
11             do
12             {
13                 //取余
14                 int Residue = N % D;
15                 char c=(Residue<10)?(char)(Residue+48):(char)(Residue+55);
16                 stack.Push(c);
17             } while ((N=N/D)!=0);//当商为0时代表运算结束
18             string s = string.Empty;
19
20             while (stack.Count>0)
21             {
22                 //弹出所有的元素
23                 s += stack.Pop().ToString();
24             }
25             return s;
26         }
27     }

 1  public class MyStack
 2     {
 3         //用于存放栈元素
 4         private object[] _array;
 5         //默认的栈容量
 6         private const int _defaultCapactity = 10;
 7         private int _size;
 8
 9
10         public MyStack()
11         {
12             this._array=new object[_defaultCapactity];
13             this._size = 0;
14         }
15
16         public MyStack(int initalCapacity)
17         {
18             if (initalCapacity<0)
19             {
20                 throw new ArgumentOutOfRangeException("initalCapacity","栈空间容量不可为负");
21             }
22             if (initalCapacity<_defaultCapactity)
23             {
24                 initalCapacity = _defaultCapactity;
25             }
26             this._array=new object[initalCapacity];//分配栈空间
27             this._size = 0;
28         }
29
30         //出栈
31         public virtual object Pop()
32         {
33             if (this._size==0)
34             {
35                 throw new InvalidOperationException("栈下溢");
36             }
37             object obj = this._array[--this._size];
38             this._array[this._size] = null;
39             return obj;
40         }
41
42         //进栈
43         public virtual void Push(object obj)
44         {
45             if (this._size==this._array.Length)
46             {
47                 //栈扩容
48                 object[] dest=new object[2*this._array.Length];
49                 Array.Copy(this._array, 0, dest, 0, this._size);
50                 this._array = dest;
51             }
52             this._array[this._size++] = obj;
53         }
54
55         public virtual int Count
56         {
57             get { return this._size;}
58         }
59
60         //获得栈顶元素
61         public virtual object Peek()
62         {
63             object obj = this._array[this._size];
64             return obj;
65         }
66     }

时间: 2024-11-04 14:51:07

03.队列的相关文章

算法初级面试题03——队列实现栈、栈实现队列、转圈打印矩阵、旋转矩阵、反转链表、之字打印矩阵、排序矩阵中找数

第一部分主要讨论:栈.队列.数组矩阵相关的面试题 题目一 用数组结构实现大小固定的队列和栈 public static class ArrayStack { private Integer[] arr; private Integer size; public ArrayStack(int initSize) { if (initSize < 0) { throw new IllegalArgumentException("The init size is less than 0"

ConcurrentAsyncQueue 2014-09-07

namespace Microshaoft { using System; using System.Collections.Concurrent; using System.Diagnostics; using System.Threading; internal static class QueuedObjectsPoolManager { public static readonly QueuedObjectsPool<Stopwatch> StopwatchsPool = new Qu

RabbitMQ (消息队列)专题学习03 Work Queues(工作队列)

一.概述 工作队列(Work queues) (使用Java客户端) 在前面的专题学习中,我们使用Java语言实现了一个简单的从名为"hello"的队列中发送和接收消息的程序,在这部内容中我们将创建一个工作队列被用来分配定时消息任务,而且通过多个接收者(工作者)实现. 工作队列(又名任务队列),主要的思想是为了避免立即做一个资源密集型的任务(多消息同时密集发送),不必等待它完成,当运行许多工作者的让任务都在她们之间共享. 它在web应用中是非常有用的,因为在很短的时间内http请求窗口

第03次作业-栈和队列

第03次作业-栈和队列 1.学习总结 2.PTA实验作业 2.1题目一 7-3 表达式转换(25 分) 2.2 设计思路(伪代码或流程图) 定义变量result[100]存储需要输出的式子. 定义变量str[100]存储输入的表达式 for i=0 to strlen(str) if(str[i] 为 '-' 并且 str[i-1]不是数字) then result[r++]=str[i]; elseif (str[i]不是数字) then while str[i]为数字或为"." d

数据结构和算法学习总结03 线性表---队列

队列 队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表. 与栈的比较: 1.队列先进先出,栈先进后出. 2.从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同. 但它们是完全不同的数据类型.除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定": 栈是限定只能在表的一端进行插入和删除操作的线性表:队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表. 队列同样分为顺序队列和链式队列,我们一般用链式队

【Weiss】【第03章】练习3.26:双端队列

[练习3.26] 双端队列(deque)是由一些项的表组成的数据结构,对该数据结构可以进行下列操作: Push(X,D):将项X插入到双端队列D的前端. Pop(D):从双端队列D中删除前端项并返回. Inject(X,D):将项X插入到双端队列D的尾端. Eject(D):从双端队列D中删除尾端项并返回. 编写支持双端队列的例程,每种操作均花费O(1)时间. Answer: 相当简单的题目,把改一改双向链表就可以了. 测试代码: 1 #include <iostream> 2 #includ

【Weiss】【第03章】练习3.25:数组模拟队列

[练习3.25] 编写实现队列的例程,使用 a.链表 b.数组 Answer: 在这章一开头就已经写了个链表的队列例程了,所以实际上只要做b小题就可以. 数组模拟队列和链表的两点小不同是: ①.数组空间有限,入队需要检测数组是否已经满 ②.数组经过几次操作后,rear可能绕回front前面,所以许多操作都要用模来实现. 测试代码: 1 #include <iostream> 2 #include "queue.h" 3 using namespace std; 4 usin

研磨数据结构与算法-03栈与队列

一,栈 public class MyStack { //底层实现是一个数组 private long[] arr; private int top; /** * 默认的构造方法 */ public MyStack() { arr = new long[10]; top = -1; } /** * 带参数构造方法,参数为数组初始化大小 */ public MyStack(int maxsize) { arr = new long[maxsize]; top = -1; } /** * 添加数据

【Weiss】【第03章】队列例程

前几个例程还是相当简单的,把链表即时改了一下就是队列了. 还有想了一下,决定这种例程的代码放法是:先把测试代码默认折叠放在前面,然后把实现代码默认展开放在后面. 测试代码如下: 1 #include <iostream> 2 #include "queue.cpp" 3 using namespace std; 4 using namespace queue; 5 template class Queue<int>; 6 int main(void) 7 { 8