可自动增长队列长度的泛型循环队列
2011-03-01 13:27
211 查看
最近不忙,随便写写!
队列代码:
/// <summary>
/// 一个可以自动增长长度的队列,并且可以重复循环队列
/// </summary>
/// <typeparam name="T">自定义的泛型</typeparam>
class Queue <T>
{ //队列出队index
int front;
//队列入队Index
int back;
//队列中元素数量
int size;
//队列的初始长度设置为3
T[] data=new T [3] ;
//获取队列中的元素数量
public int QueueSize
{
get { return size; }
}
/// <summary>
/// 元素出队
/// </summary>
/// <returns></returns>
public T DeQueue()
{
T t =default(T );
if (size != 0)
{
SetFrontToZero();
t = data[front];
data[front] = default(T);
front++;
size--;
}
return t;
}
/// <summary>
/// 元素入队
/// </summary>
/// <param name="t"></param>
public void EnQueue(T t)
{
AddQueueSize();
SetBackToZero();
data[back] = t;
back++;
size++;
}
//队列自增长
private void AddQueueSize()
{
if (size >= data.Length)
{
back = size;
T[] newData = new T[data.Length * 2];
for (int i = 0; i < data.Length; i++)
{
newData[i] = DeQueue();
}
data = newData;
size = back;
front = 0;
}
}
/// <summary>
/// 设置出队index
/// </summary>
private void SetBackToZero()
{
if (back == data.Length&&size <data .Length )
{
back = 0;
}
}
/// <summary>
/// 设这出队Index
/// </summary>
private void SetFrontToZero()
{
if (front == data.Length && size !=0)
{
front = 0;
}
}
} 测试用到的泛型数据:View Code /// <summary>
/// 个人成绩结构体
/// </summary>
class SocreMode : IComparable,ICloneable
{
public string mFileName = "";
public string mMail = "";
public string mName = "";
public int mSocre;
public string FileName
{
get
{
return mFileName;
}
set
{
mFileName = value;
}
}
public string Mail
{
get
{
return mMail;
}
set { mMail = value; }
}
public string Name
{
get { return mName; }
set { mName = value; }
}
public int Socre
{
get { return mSocre; }
set { mSocre = value; }
}
/// <summary>
/// 实现IComparable接口
/// </summary>
/// <param name="obj">SocreMode对象</param>
/// <returns></returns>
int IComparable.CompareTo(object obj)
{
SocreMode temp = (SocreMode)obj;
if (temp.mName == mName)
{
return this.mMail.CompareTo(temp.mMail);
}
else
{
return this.mName.CompareTo(temp.Name);
}
}
/// <summary>
/// 重载ToString 方法
/// </summary>
/// <returns></returns>
public override string ToString()
{
return string.Format(mMail.PadRight(30) + "\t" + mName.PadRight(15 - (System.Text.Encoding.Default.GetByteCount(mName) - mName.Length)) + "\t" + mSocre.ToString());
}
public object Clone()
{
SocreMode temp = new SocreMode();
temp.mSocre = this.mSocre;
return temp;
}
}测试代码:
class Program
{
static void Main(string[] args)
{
int len;
int lens = 0;
int lCount=30;
Queue<SocreMode> lQueue = new Queue<SocreMode>();
SocreMode lSocreMode = new SocreMode();
Console.WriteLine(" 一次入队3个元素,出队三个元素 ");
for (int i = 0; i < lCount; i++)
{
len = 3;
SocreMode tmpSocreMode =(SocreMode) lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
int two = lQueue.DeQueue().Socre;
int three = lQueue.DeQueue().Socre;
Console.Write( one.ToString () +two.ToString () +three .ToString ());
}
Console.WriteLine("\n////////////////////////////////////");
Console.WriteLine(" 一次入队2个元素,出队1个元素 ");
len = 0;
lens = 2;
for (int i = 0; i < lCount; i++)
{
len++;
SocreMode tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
Console.Write(one.ToString() );
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
while (lQueue.QueueSize != 0)
{
len++;
//lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
Console.Write(one.ToString());
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
Console.WriteLine("\n////////////////////////////////////");
Console.WriteLine(" 一次入队4个元素,出队2个元素 ");
len = 0;
lens = 4;
for (int i = 0; i < lCount; i++)
{
len++;
SocreMode tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
int two = lQueue.DeQueue().Socre;
//int three = lQueue.DeQueue().Socre;
Console.Write(one.ToString() + two.ToString() );
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
while (lQueue.QueueSize != 0)
{
len++;
//lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
Console.Write(one.ToString());
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
Console.WriteLine("\n////////////////////////////////////");
Console.WriteLine(" 一次入队4个元素,出队2个元素 ");
len = 0;
lens = 5;
for (int i = 0; i < lCount; i++)
{
len++;
SocreMode tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
int two = lQueue.DeQueue().Socre;
//int three = lQueue.DeQueue().Socre;
Console.Write(one.ToString() + two.ToString());
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
while (lQueue.QueueSize != 0)
{
len++;
//lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
Console.Write(one.ToString());
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
Console.WriteLine("\n////////////////////////////////////");
Console.WriteLine(" 一次入队7个元素,出队2个元素 ");
len = 0;
lens = 7;
for (int i = 0; i < lCount; i++)
{
len++;
SocreMode tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
int two = lQueue.DeQueue().Socre;
//int three = lQueue.DeQueue().Socre;
Console.Write(one.ToString() + two.ToString());
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
while (lQueue.QueueSize != 0)
{
len++;
//lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
Console.Write(one.ToString());
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
Console.WriteLine("\n////////////////////////////////////");
Console.ReadKey();
}
}
队列代码:
/// <summary>
/// 一个可以自动增长长度的队列,并且可以重复循环队列
/// </summary>
/// <typeparam name="T">自定义的泛型</typeparam>
class Queue <T>
{ //队列出队index
int front;
//队列入队Index
int back;
//队列中元素数量
int size;
//队列的初始长度设置为3
T[] data=new T [3] ;
//获取队列中的元素数量
public int QueueSize
{
get { return size; }
}
/// <summary>
/// 元素出队
/// </summary>
/// <returns></returns>
public T DeQueue()
{
T t =default(T );
if (size != 0)
{
SetFrontToZero();
t = data[front];
data[front] = default(T);
front++;
size--;
}
return t;
}
/// <summary>
/// 元素入队
/// </summary>
/// <param name="t"></param>
public void EnQueue(T t)
{
AddQueueSize();
SetBackToZero();
data[back] = t;
back++;
size++;
}
//队列自增长
private void AddQueueSize()
{
if (size >= data.Length)
{
back = size;
T[] newData = new T[data.Length * 2];
for (int i = 0; i < data.Length; i++)
{
newData[i] = DeQueue();
}
data = newData;
size = back;
front = 0;
}
}
/// <summary>
/// 设置出队index
/// </summary>
private void SetBackToZero()
{
if (back == data.Length&&size <data .Length )
{
back = 0;
}
}
/// <summary>
/// 设这出队Index
/// </summary>
private void SetFrontToZero()
{
if (front == data.Length && size !=0)
{
front = 0;
}
}
} 测试用到的泛型数据:View Code /// <summary>
/// 个人成绩结构体
/// </summary>
class SocreMode : IComparable,ICloneable
{
public string mFileName = "";
public string mMail = "";
public string mName = "";
public int mSocre;
public string FileName
{
get
{
return mFileName;
}
set
{
mFileName = value;
}
}
public string Mail
{
get
{
return mMail;
}
set { mMail = value; }
}
public string Name
{
get { return mName; }
set { mName = value; }
}
public int Socre
{
get { return mSocre; }
set { mSocre = value; }
}
/// <summary>
/// 实现IComparable接口
/// </summary>
/// <param name="obj">SocreMode对象</param>
/// <returns></returns>
int IComparable.CompareTo(object obj)
{
SocreMode temp = (SocreMode)obj;
if (temp.mName == mName)
{
return this.mMail.CompareTo(temp.mMail);
}
else
{
return this.mName.CompareTo(temp.Name);
}
}
/// <summary>
/// 重载ToString 方法
/// </summary>
/// <returns></returns>
public override string ToString()
{
return string.Format(mMail.PadRight(30) + "\t" + mName.PadRight(15 - (System.Text.Encoding.Default.GetByteCount(mName) - mName.Length)) + "\t" + mSocre.ToString());
}
public object Clone()
{
SocreMode temp = new SocreMode();
temp.mSocre = this.mSocre;
return temp;
}
}测试代码:
class Program
{
static void Main(string[] args)
{
int len;
int lens = 0;
int lCount=30;
Queue<SocreMode> lQueue = new Queue<SocreMode>();
SocreMode lSocreMode = new SocreMode();
Console.WriteLine(" 一次入队3个元素,出队三个元素 ");
for (int i = 0; i < lCount; i++)
{
len = 3;
SocreMode tmpSocreMode =(SocreMode) lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
int two = lQueue.DeQueue().Socre;
int three = lQueue.DeQueue().Socre;
Console.Write( one.ToString () +two.ToString () +three .ToString ());
}
Console.WriteLine("\n////////////////////////////////////");
Console.WriteLine(" 一次入队2个元素,出队1个元素 ");
len = 0;
lens = 2;
for (int i = 0; i < lCount; i++)
{
len++;
SocreMode tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
Console.Write(one.ToString() );
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
while (lQueue.QueueSize != 0)
{
len++;
//lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
Console.Write(one.ToString());
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
Console.WriteLine("\n////////////////////////////////////");
Console.WriteLine(" 一次入队4个元素,出队2个元素 ");
len = 0;
lens = 4;
for (int i = 0; i < lCount; i++)
{
len++;
SocreMode tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
int two = lQueue.DeQueue().Socre;
//int three = lQueue.DeQueue().Socre;
Console.Write(one.ToString() + two.ToString() );
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
while (lQueue.QueueSize != 0)
{
len++;
//lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
Console.Write(one.ToString());
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
Console.WriteLine("\n////////////////////////////////////");
Console.WriteLine(" 一次入队4个元素,出队2个元素 ");
len = 0;
lens = 5;
for (int i = 0; i < lCount; i++)
{
len++;
SocreMode tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
int two = lQueue.DeQueue().Socre;
//int three = lQueue.DeQueue().Socre;
Console.Write(one.ToString() + two.ToString());
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
while (lQueue.QueueSize != 0)
{
len++;
//lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
Console.Write(one.ToString());
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
Console.WriteLine("\n////////////////////////////////////");
Console.WriteLine(" 一次入队7个元素,出队2个元素 ");
len = 0;
lens = 7;
for (int i = 0; i < lCount; i++)
{
len++;
SocreMode tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
tmpSocreMode = (SocreMode)lSocreMode.Clone();
tmpSocreMode.Socre = tmpSocreMode.Socre + i;
lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
int two = lQueue.DeQueue().Socre;
//int three = lQueue.DeQueue().Socre;
Console.Write(one.ToString() + two.ToString());
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
while (lQueue.QueueSize != 0)
{
len++;
//lQueue.EnQueue(tmpSocreMode);
int one = lQueue.DeQueue().Socre;
Console.Write(one.ToString());
if (len == lens)
{
Console.Write("\n");
len = 0;
}
}
Console.WriteLine("\n////////////////////////////////////");
Console.ReadKey();
}
}
相关文章推荐
- 获取表结构信息(字段名,类型,长度,精度,小数位数,主键,自动增长)
- java BingInteger生成2进制String循环移位时长度自动缩减
- 黑马程序员--基础--第一篇--JDK5.0新特性泛型 静态倒入 自动拆装箱 不定项参数 增强for如循环 枚举
- HW输入字符串长度,字符串,计数m。从前往后计数,当数到m个元素时,m个元素出列,同时将该元素赋值给m,然后从下一个数计数循环,直到所有数字都出列,给定的数全部为大于0的数字。输出出队队列。
- java BingInteger生成2进制String循环移位时长度自动缩减
- 【数据结构】循环队列的front,rear指针以及队列满的条件、计算队列长度
- day9 JDK 新特性--注解、新 for 循环、静态导入、自动装箱拆箱、泛型、可变长参数
- 循环队列之循环队列长度和头尾指针关系
- java BingInteger生成2进制String循环移位时长度自动缩减
- C#队列泛型基类BaseQueue,访问索引器时自动创建类型实例
- 揭开.NET消息循环的神秘面纱(GetMessage()无法取得任何消息,就会进入Idle(空闲)状态,进入睡眠状态(而不是Busy Waiting)。当消息队列不再为空的时候,程序会自动醒过来)
- 循环队列的综合操作(出入队、获取队长度)C语言实现
- [笔试题目]使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?
- 用C++实现的带队列,并且当队列为空及任务数大于最大队列长度时自动wait的线程池 ( by quqi99 )
- JDK1.5 增强for 循环 强调泛型
- JAVA的泛型 && JAVA的几种for循环方式
- js自动循环切换
- 循环队列的实现
- 循环队列
- textarea根据内容自动增长