昨天寫了陣列與一般堆疊,講到堆疊當然會想到佇列,所以今天來玩一般佇列。
一般佇列當然是先進先出,也就是說從嘴巴吃進去從屁股拉出來,所以會有top當作屁股、rear當作嘴巴,放置item一定都從嘴巴,刪除一定都從屁股。
需要寫到的當然會有create功能(用來初始化佇列),isempty、isfull(用來判斷是否空佇列、是否有空間可以放入),add功能(放入)、以及del(刪除)功能。其實一般佇列應該還要寫一個釋放空間功能,因為佇列的存入一定是從rear,一般佇列並不像是環狀佇列一樣頭尾銜接,所以如果沒有釋放空間功能的話,當rear的位置在陣列的最尾端時,不管陣列中有沒有空間都是無法繼續放入元素的。
#include <iostream>
using namespace std;
int top=-1;
int rear=-1;
const int qsize=10;
void get_top_rear(int t, int r)
{ top=t; rear=r;}
int isempty(int t, int r)
{
if(t==r){ return 0;}//empty
return 1;//facts exist
}
int isfull(int t, int r)
{
if (((t-r)+1)==qsize){ return 1;}//FULL
return 0; //space exist
}
void create(int arr[qsize],int t, int r)
{
for(int i=0; i<qsize; i++){ arr[i]=0;}
get_top_rear(-1,-1);
}
int add(int arr[qsize], int t, int r, int item)
{
if(isfull(t,r)==1){ cout<<"FULL"<<endl; return 0;}
else
{
if(t!=-1)
{
for(int i=0; i<(r-t+1); i++)//釋放空間
{
arr[i]=arr[(t+i)+1];
}
arr[r-t]=item;
get_top_rear(-1,r-t);
}
else
{
arr[r+1]=item;
get_top_rear(t,r+1);
}
}
}
int del(int arr[qsize], int t, int r)
{
if(isempty(t,r)==0){ cout<<"queue is EMPTY!"<<endl; return 0;}
else
{
arr[t+1]=0;
get_top_rear(t+1,r);
}
}
void printq(int arr[qsize], int size)
{
for(int i=0;i<size;i++)
{
cout<<arr[i]<<"\t";
}
cout<<top<<"\t"<<rear;
}
void main ()
{
int que[qsize]={0};
create(que, top,rear);
add(que,top,rear, 10);
add(que,top,rear, 11);
del(que,top,rear);
add(que,top,rear, 12);
printq(que,qsize);
system("pause");
}