昨天寫了陣列與一般堆疊,講到堆疊當然會想到佇列,所以今天來玩一般佇列。

一般佇列當然是先進先出,也就是說從嘴巴吃進去從屁股拉出來,所以會有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");
}

arrow
arrow

    archerdevil 發表在 痞客邦 留言(1) 人氣()