顺序队列

来源:互联网 发布:旅游分销平台源码 编辑:程序博客网 时间:2024/05/19 13:06
顺序队列

顺序队列:用一片连续的存储空间来存储队列中的数据元素,这样的队列称作顺序队列(SequenceQueue)。类似顺序栈,用一维数组来存放顺序队列中的数据元素。队头位置设置在数组下标为0的段,用 front 表示;队尾位置设在数组的另外一端,用 rear 表示。front 和 rear 随着插入和删除而变化。当队列为空时,front = rear = -1;

队列的功能接口
public Interface IQueue<T>
{
void Enqueue(T item);入队(放在队尾Rear)

T Dequeue(); 出队(放在队首 Front)

T Peek();得到队首的元素,不移除

void Clear();清空元素

int Count{get;}求队列的长度,元素的个数

int GetLength()

bool IsEmpty();判断队列是否为空

}


实现顺序队列

只要顺序两个字,一定是使用数组存储的,在入队时要考虑元素的个数是否已经填满数组和队尾的位置出队的时候要考虑数组元素的个数和队首的位置,顺序队列的队首或队尾位于数组末尾(length-1)时要移到数组首位即[0]号位置。取得的元素都是 data[front+1]除了在数组尾部直接等于 data[0],入栈存储数据 data[rear+1],在数组尾部直接等于 data[0]。

public SeqQueue<T>:IQueue<T>
{
private T[ ]data;存储数据
private int count;当前有多少元素
private int front;队首索引
private int rear;队尾


构造函数
public SeqQueue(int size)
{
data = new T[size];
count = 0;
front = rear =-1;

}

public SeqQueue():this(8){}


获取当前元素的个数
public int Count
{
get{return count;}
}

pulic int GetLength()
{
return count;
}

判断是否为空
public bool IsEmpty()
{
return count==0;
}


清空操作,只要把 count 和队首队尾重置就可以了
public void Clear()
{count=0;
front = rear=-1;
}

入队操作
public void Enqueue(T item)
{
if(count==data.Length)判断数组有没有多余的空间
{
cw("队列已满,不可以再添加新的数据");
} else
{
如果有空间存储,判断是否位于数组的末尾
if(rear==data.Length-1)
{队尾位于数组末尾,新来的元素需要在数组0号位置存储
data[0]=item;
rear=0;

}else
{
data[rear+1]=item;
rear++;
}
count++;
}
}



出队操作
public T Dequeque()
{
if (count <= 0) {
 Console.WriteLine ("队列为空,不可以删除数据");    
 return default(T);
 } else {
当队首位于数组的末尾,队首移动到数组0号位置首位
  if (front == data.Length-1) {
        front = 0;
        count--;
        return data [0];
      } else {
     T temp = data [++front];
       count--;
      return temp;
                }

            }
}



取数据
public T Peek()
{
if (count <= 0) {
         Console.WriteLine ("队列为空");
         return default(T);
            } else {
                if (front == data.Length-1) {
                    return data [0];
                } else {
                    return data [front+1];
                }
            }
}

原创粉丝点击