歐歐終於結束Stack的部分了,接下來換來介紹Queue~
我們一樣先來舉一些生活中的例子,像是我們平常要買東西、搭車等等都需要排隊,先排到隊伍中的人會先獲得購買的資格,越後面的人則要等越久才能買到想要的東西,這就像佇列一樣\\\٩( 'ω' )و ////
一、linear Array
宣告:
1.Q:array[1..n] of item;
2.rear,front:int=0;
{
if(rear==n)return "Q Full";
else{
rear=rear+1;
Q[rear]=item;
}
}
{
if(front==rear)return "Q empty";
else{
front=front+1;
item=Q[front];
return item;
}
}
分析:
當rear==n條件成立時,不一定代表Q真的Full
(例如:rear=n,front=2,Q還有2個空格,並未full)
所以有空間浪費掉沒有使用
二、circular array,最多只能用(n-1)格空間
宣告:
1.Q:array[0,...,(n-1)] of item;
2.rear,front:int=0;
circular 之觀念:
rear=(rear+1)%n
front=(front+1)%n
{
rear=(rear+1)%n;
if(rear==front) then return "Q Full";
else Q[rear]=item;
}
{
if(front==rear)return "Q empty";
else{
front=(front+1)%n;
item=Q[front];
return item;
}
}
分析:
三、circular array,最多可用n格空間
宣告:
1.Q:array[0,...,(n-1)] of item;
2.rear,front:int=0;
3.Tag:Boolean=false;用以協助判斷Q empty or Q full,搭配rear,front
{
if(rear==front) and (Tag==True) then return "Q Full";
else{
rear=(rear+1)%n;
Q[rear]=item;
if(rear==front) then Tag=True;
}
}
{
if(front==rear) and (Tag==False) then return "Q empty";
else{
front=(front+1)%n;
item=Q[front];
if(front==rear) then Tag=False;
return item;
}
}
分析:
今天先到這邊,明天再來介紹linked list的作法
最近覺得人生好難,遇到很難過很挫折的事情
但還是要加油努力撐下去的對吧(´;ω;`)