c#使用for向队列和栈中java对象动态添加属性对象

详解C#栈与队列1_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
详解C#栈与队列1
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩29页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢第3章栈与队列;教学要点;栈是一种具有后进先出特性的特殊线性表,而队列是一;本章介绍栈与队列的定义、抽象数据类型、不同存储结;本章在VisualStudio中用stackqu;建议本章授课6学时,实验6学时;3.1栈的概念及类型定义;3.1.1栈的基本概念;栈(stack)是一种特殊的线性表,只允许在这种;2→1;图3.1栈结构;允许插入和删除操作的一端称为
栈是一种具有后进先出特性的特殊线性表,而队列是一种具有先进先出特性的特殊线性表,它们的数据元素之间具有顺序的逻辑关系。这两种数据结构与线性表不同之处在于,线性表的插入和删除操作可以在任意的位置进行,而栈和队列的插入和删除操作受到限制:栈的插入和删除只允许在线性表的一端进行,队列的插入和删除操作分别在线性表的两端进行。栈的特点是后进先出,队列的特点是先进先出,两者在实际问题中有着广泛的应用。栈和队列都可以采用顺序存储结构和链式存储结构予以实现。
本章介绍栈与队列的定义、抽象数据类型、不同存储结构的实现和应用举例,以及递归的定义、算法设计和数据结构举例。存在自调用的算法称为递归算法,它是一种有效的算法设计方法,是解决许多复杂问题的重要方法。
本章在Visual Studio中用stackqueue类库型项目实现有关数据结构的基础类定义,用stackqueuetest应用程序型项目实现对这些数据结构的测试和演示程序。
建议本章授课6学时,实验6学时。
栈的概念及类型定义
栈的基本概念
栈(stack)是一种特殊的线性表,只允许在这种线性表的一端进行插入和删除操作。向栈中插入数据元素的操作称为入栈(push),从栈中删除数据元素的操作称为出栈(pop)。每次删除的数据元素总是最后插入的数据元素,因此栈是一种“后进先出”(Last In First Out,LIFO)的线性结构。栈就像某种只有单个出入口的仓库,每次只允许一件件地往里面堆货物(入栈),然后一件件地往外取货物(出栈),不允许从中间放入或抽出货物。
图3.1 栈结构
允许插入和删除操作的一端称为栈顶(top),另一端则称为栈底(bottom)。栈顶的当前位置随着插入和删除操作的进行而动态地变化,标识栈顶当前位置的变量称为栈顶指针。没有数据元素的栈称
数据结构与算法(C#语言版)
为空栈。栈结构如图3.1所示。图中,数据元素的入栈次序为1→2→3→4,出栈次序为4→3→2→1。对于一种要入栈的数据元素序列,通过控制入栈和出栈时机,可以得出多种出栈排列。
栈的抽象数据类型
1. 栈的数据元素
和线性表一样,我们使用抽象数据元素ai表示栈的数据元素。栈也是由n(n≥0)个数据元素a0,a1,a2,?,an-1组成的有限序列,栈可以记为:
Stack = { a0,a1,a2,?,an-1}
其中,n表示栈中数据元素的个数,称为栈的长度。若n=0,则称为空栈。
栈中的数据元素至少具有一种相同的属性,我们称这些数据元素属于同一种抽象数据类型。 2. 栈的基本操作
在一个栈数据结构上可以进行下列基本操作: ? ? ? ? ?
Initialize: 初始化。创建一个栈,并进行初始化操作,例如设置栈状态为空。 Count: 求长度。返回栈中数据元素个数。 Empty: 判断栈的状态是否为空。 Full: 判断栈的状态是否已满。
Push: 入栈。该操作将数据元素插入栈中作为新的栈顶元素。在入栈操作之前必须判断栈的状态是否已满,如果栈不满,则接收新元素入栈,否则产生栈上溢错误(Stack Overflow Exception),或者为栈先分配更大的空间,然后接收新元素入栈。 ?
Pop: 出栈。该操作取出当前栈顶数据元素,下一个数据元素成为新的栈顶元素。在出栈操作之前,必须判断栈的状态是否为空。如果栈的状态为空,产生栈下溢错误(Stack Underflow Exception)。
Peek: 获得栈顶数据元素,但不移除该数据元素,栈顶指针不变。
例如,对于数据序列{1,2,3,4}依次进行
{入栈,入栈,出栈,入栈,入栈,出栈} 的操作,栈状态随操作而进行的变化如图3.2所示。
top=-1top=0
(b) 1, 2入栈(c) 2出栈(d) 3, 4入栈(e) 4出栈
图3.2 栈状态随操作而进行的变化
C#中的栈类
.NET Framework的类库中定义了一个非泛型栈类和一个泛型栈类。非泛型栈类Stack定义在System . Collections命名空间中,它提供了一种数据后进先出的集合,其数据元素的类型是object类。
入栈的数据元素是object对象,所以可以是string等任意类型对象,而出栈的数据元素需要用object对象保存,再转化为string或其他类型的对象。
Stack&T&类是Stack类的泛型等效类,它定义在System.Collections.Generic命名空间中。Stack &T&
类所具有的属性和方法非常类似于非泛型Stack类对应的属性和方法,差别在于前者是强类型栈,元素的类型要与栈定义时声明的类型保持一致。泛型类在大多数情况下比非泛型类执行得更好并且是类型安全的。
Stack类具有如下成员(属性和方法)实现栈的各种操作: 公共构造函数
//初始化Stack类的新实例
Stack( ICollection c);
Stack ( int capacity); 公共属性
virtual int Count {}
//获取包含在栈中的元素数 公共方法
virtual void Push( object obj);
virtual object Pop();
//将对象插入栈的顶部
//移除并返回位于栈顶部的对象
//返回位于栈顶部的对象,但不将其移除 //确定某个元素是否在栈中
virtual object Peek();
virtual bool Contains(object obj);
using System.C namespace stackqueuetest{
public class SamplesStack{
public static void Main(){
创建Stack对象并向其添加值,以及打印出其值。
// Creates and initializes a new Stack. Stack myStack = new Stack();
myStack.Push(&Hello&); myStack.Push(&World&); myStack.Push(&!&); // Displays the properties and values of the Stack. Console.Write( &myStack & );
Console.WriteLine( &\tCount:
{0}&, myStack.Count ); Console.Write( &\tValues:\n& ); foreach(object o in
Console.Write( &\t{0}&, o);
程序运行结果如下:
【例3.2】 利用栈进行数制转换。
数制转换是计算机实现计算的基本问题。十进制数N和其他d进制数的转换具有下列关系:
N = an×dn + an-1×dn-1 + ... + a1×d1 + a0
数据结构与算法(C#语言版)
数制转换就是要确定序列{ a0,a1,a2,?,an},其解决方法很多,其中一个简单算法基于下列原理:
N = (N / d)× d + N % d
上式中“/”为整除运算,“%”为求余运算。例如:(2468)10 = (4644)8,其运算过程如下:
N % d 4 4 6
假设现要编制一个满足下列要求的程序:对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数。由于上述计算过程是从低位到高位顺序产生八进制数的各个数位,而打印输出,一般来说应从高位到低位进行,恰好和计算过程相反。因此若将计算过程中得到的八进制数的各位顺序进栈,则按出栈序列打印输出的即为对应的八进制数。程序如下:
using System.Collections.G namespace stackqueuetest {
public class DecOctConversion {
public static void Main(string[] args){
int n = 2468; if(args.Length&0){
Stack&int& s = new Stack&int&(20);
Console.Write(&十进制数: {0} -& 八进制:&,n); while (n!=0) {
s.Push(n%8); n = n/8;
n = int.Parse(args[0]);
int i = s.C
while (i&0){
Console.Write(s.Pop()); i--;
Console.WriteLine();
上述程序中使用泛型类Stack&T&定义了一个整型栈,Push和Pop操作要求的都是整型参数;而非泛型类Stack的Push和Pop操作要求的是object类型参数,而实参是整型变量,所以入栈时要先将整型实参装箱为object类型,而出栈时要将object类型拆箱为整型。如果频繁地进行装箱和拆箱,执行效率会受到很大影响。这体现了泛型类在大多数情况下比非泛型类执行得更好并且是类型安全的。
3.2 栈的存储结构及实现
栈作为一种特殊的线性表,可以如同一般线性表一样采用顺序存储结构和链式存储结构实现。顺
序存储结构实现的栈称为顺序栈(Sequenced Stack),链式存储结构实现的栈称为链式栈(Linked Stack)。
3.2.1 栈的顺序存储结构及操作实现
栈的顺序存储结构用一组连续的存储空间存放栈的数据元素。它可以用下面声明的SequencedStack类来描述。
public class SequencedStack&T& {
private T[]
private const int empty = -1;
private int top =
//top为栈顶元素下标
SequencedStack类中成员变量items用数组存储栈的数据元素,成员变量top指示当前栈顶数据元素的下标。SequencedStack类的一个对象就是一个栈的实例。
顺序栈的操作作为SequencedStack类的属性和方法成员予以实现,下面分别描述实现这些操作的算法。
1) 栈的初始化
用类的构造方法初始化一个栈对象,它申请items数组的存储空间来存放栈的数据元素,设置栈初始状态为空。
//带参数时,构造具有n个存储单元的空栈
public SequencedStack(int n) {
items = new T[n];
//不带参数时,构造具有16个存储单元的空栈
public SequencedStack() : this(16) { }
//设置栈初始状态为空
2) 返回栈的元素个数
public int Count {
get { return top + 1; }
3) 判断栈是否为空和是否为满。
public bool Empty{
get{ return top==}
public bool Full{
get{ return top&=items.Length-1;} }
当栈不满时,移动栈顶指针,这里是将栈顶数据元素下标top加1,将k放入top位置,作为新的栈顶数据元素。此时入栈的数据元素是T类型,在调用该操作时,参数的类型要与栈定义时声明的类型保持一致。当栈当前分配的存储空间已装满数据元素,在进行后续的操作前,需要调用DoubleCapacity方法重新分配存储空间,并将原数组中的数据元素逐个拷贝到新数组。
包含各类专业文献、外语学习资料、中学教育、高等教育、幼儿教育、小学教育、31第3章栈与队列等内容。 
 数据结构第3章 栈和队列 答案_IT/计算机_专业资料。数据结构第3章 栈和队列 答案 第3 章 栈和队列 测试题 及答案 一、填空题 1. 向量、栈和队列都是 ...  第3章 栈与队列习题参考答案 隐藏&& 习题三参考答案 习题三参考答案 备注: 红色字体标明的是与书本内容有改动的内容。 备注: 红色字体标明的是与书本内容有改动...  第四第 3 章 栈和队列 一、基础知识题 3.1 有五个数依次进栈:1,2,3,4,5。在各种出栈的序列中,以 3,4 先出的序列有哪几 个。 (3在4之前出栈) ...  数据结构 栈和队列答案数据结构 栈和队列答案隐藏&& 第3 章 栈和队列一、选择题 1.B 6.B 11.B 16.C 21.C 2.C 7.C 12.C 17.①D②A 22.A 3....  第3章 栈和队列 答案 一、填空题 1. 向量、栈和队列都是 线性 结构,可以在向量的 任何 位置插入和删除元素;对 于栈只能在 栈顶 插入和删除元素;对于队列只...  第三章栈和队列_天文/地理_自然科学_专业资料。第三章 栈和队列一.选择题 1.栈与一般线性表的区别在于___。 A.数据元素的类型不同 B.运算是否受限制 C.数...  第3章 栈和队列_物理_自然科学_专业资料。第3章 栈和队列 本章主要介绍以下内容: 1.栈的概念、存储结构及其基本操作 2.队列的概念、存储结构及其基本操作 3....  第3章 栈与队列习题参考答案_农学_高等教育_教育专区。习题三参考答案 习题三参考答案 备注: 红色字体标明的是与书本内容有改动的内容。 备注: 红色字体标明的是...  栈与队列复习栈与队列复习隐藏&& 第3 章 栈和队列 数据结构 第三章练习(答案)计算机办公应用 专业 一、单项选择题 1.栈的特点是( B ) ,队列的特点是( A...C#3堆栈与队列ppt_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C#3堆栈与队列ppt
上传于||文档简介
&&C​#​课​程​p​p​t
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩12页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 js动态给对象添加属性 的文章

 

随机推荐