大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Java隊列

隊列的數組實現

使用線性數組可以很容易地表示隊列。 在每個隊列的情況下實現有兩個變量,即前面(front)和后面(rear)。 前后變量指向隊列中執行插入和刪除的位置。 最初,front和queue的值為-1,表示空隊列。 包含5個元素的隊列的數組表示以及前后的值如下圖所示。

上圖顯示了形成英文單詞“HELLO”的字符隊列。 因為,到目前為止在隊列中沒有執行刪除報操作,因此font的值保持為0。 但是,每次在隊列中執行插入時,rear的值都會增加1。 將元素插入上圖所示的隊列后,隊列將如下所示。 rear的值將變為5,而font的值保持不變。

刪除一個元素后,front的值將從0增加到1。當前,隊列內容將類似于如下。

1、在隊列中插入元素的算法

通過將rear與max - 1進行比較來檢查隊列是否已滿,如果是,則返回溢出錯誤。

如果要將數據項作為列表中的第一個元素插入,則在這種情況下將前后值設置為0并將元素插入后端。否則繼續增加rear的值并逐個插入每個元素,使用rear作為索引。

算法

第1步:IF REAR = MAX - 1
    寫OVERFLOW
    轉到第4步
    [IF結束]
第2步:IF FRONT = -1且REAR = -1
    SET FRONT = REAR = 0
    其他
    SET REAR = REAR + 1
    [IF結束]
第3步:設置QUEUE [REAR] = NUM
第4步:退出

實現以下算法如下所示:

void insert (int queue[], int max, int front, int rear, int item)   
{  
    if (rear + 1 == max)  
    {  
        printf("overflow");  
    }  
    else  
    {  
        if(front == -1 && rear == -1)  
        {  
            front = 0;  
            rear = 0;  
        }  
        else  
        {  
            rear = rear + 1;   
        }  
        queue[rear]=item;  
    }  
}

2、從隊列中刪除元素的算法

如果front的值為-1或front的值大于rear,則提示下溢信息并退出。

否則,繼續增加前后的值并每次返回存儲在隊列前端的數據項。

算法

第1步:IF FRONT = -1或FRONT> REAR
    提示溢出
    其他
    SET VAL = QUEUE [FRONT]
    SET FRONT = FRONT + 1
    [IF結束]
第2步:退出

實現算法,如下所示:

int delete (int queue[], int max, int front, int rear)  
{  
    int y;   
    if (front == -1 || front > rear)   

    {  
        printf("underflow");  
    }  
    else   
    {  
        y = queue[front];  
        if(front == rear)  
        {  
            front = rear = -1;  
            else   
            front = front + 1;   

        }  
        return y;  
    }  
}

完整的代碼實現如下所示:

#include<stdio.h>   
#include<stdlib.h>  
#define maxsize 5  
void insert();
void delete();
void display();
int front = -1, rear = -1;
int queue[maxsize];
void main()
{
    int choice;
    while (choice != 4)
    {
        printf("*************************Main Menu*****************************\n");
        printf("=================================================================\n");
        printf("1.insert an element\n2.Delete an element\n3.Display the queue\n4.Exit\n");
        printf("Enter your choice ?");
        scanf("%d", &choice);
        switch (choice)
        {
        case 1:
            insert();
            break;
        case 2:
            delete();
            break;
        case 3:
            display();
            break;
        case 4:
            exit(0);
            break;
        default:
            printf("Enter valid choice??\n");
        }
    }
}
void insert()
{
    int item;
    printf("\nEnter the element\n");
    scanf("\n%d", &item);
    if (rear == maxsize - 1)
    {
        printf("OVERFLOW\n");
        return;
    }
    if (front == -1 && rear == -1)
    {
        front = 0;
        rear = 0;
    }
    else
    {
        rear = rear + 1;
    }
    queue[rear] = item;
    printf("Value inserted ");

}
void delete()
{
    int item;
    if (front == -1 || front > rear)
    {
        printf("UNDERFLOW\n");
        return;

    }
    else
    {
        item = queue[front];
        if (front == rear)
        {
            front = -1;
            rear = -1;
        }
        else
        {
            front = front + 1;
        }
        printf("value deleted ");
    }


}

void display()
{
    int i;
    if (rear == -1)
    {
        printf("Empty queue\n");
    }
    else
    {
        printf("printing values .....\n");
        for (i = front;i <= rear;i++)
        {
            printf("\n%d\n", queue[i]);
        }
    }
}

執行上面示例代碼,得到以下結果:

*************Main Menu**************

==============================================

1.insert an element
2.Delete an element
3.Display the queue
4.Exit

Enter your choice ?1

Enter the element
123

Value inserted 

*************Main Menu**************

==============================================

1.insert an element
2.Delete an element
3.Display the queue
4.Exit

Enter your choice ?1

Enter the element
90

Value inserted 

*************Main Menu**************

===================================

1.insert an element
2.Delete an element
3.Display the queue
4.Exit

Enter your choice ?2

value deleted 

*************Main Menu**************
==============================================

1.insert an element
2.Delete an element
3.Display the queue
4.Exit

Enter your choice ?3

printing values .....

90

*************Main Menu**************

==============================================

1.insert an element
2.Delete an element
3.Display the queue
4.Exit

Enter your choice ?4

3、數組實現的缺點

雖然,創建隊列很容易,但是使用這種技術來實現隊列存在一些缺點。

• 內存浪費:數組的空間(用于存儲隊列元素)永遠不能被重用來存儲該隊列的元素,因為元素只能插入前端而前面的值可能很高,所以, 在此之前的所有空間,永遠不會被填補。

上圖顯示了如何在隊列的數組表示中浪費內存空間。 在上圖中,示出了具有3個元素的大小為10的隊列。 front變量的值為5,因此,不能將值重新插入front位置之前已刪除元素的位置。 數組的那么多空間被浪費了,以后不能使用(對于這個隊列)。

• 確定數組大小

關于數組實現的最常見問題是需要事先聲明的數組的大小。 由于隊列可以在運行時根據問題進行擴展,因此數組大小的擴展是一個耗時的過程,并且由于發生了大量的重新分配,因此幾乎不可能在運行時執行。 由于這個原因,要聲明數組足夠大,以便可以盡可能地存儲隊列元素,但這個聲明的主要問題是,大多數數組插槽(接近一半)永遠不能被重用。 它將再次導致內存浪費。

全部教程
主站蜘蛛池模板: 国内视频一区 | 中文字幕在线不卡视频 | 精品国产视频在线观看 | 国产合集福利视频在线视频 | 日韩精品中文字幕久久 | 婷婷综合五月 | 狠狠色成人综合网图片区 | 色综合久久久久久久久五月性色 | 国产日韩中文字幕 | 亚洲视频在线免费播放 | 亚洲欧美中文字幕高清在线一 | 深夜福利在线看 | 日本九九视频 | 99一级毛片| 女色综合| 伊人久久婷婷丁香六月综合基地 | 久久黄色免费视频 | 久久精品久久精品久久 | 香蕉视频18 | 欧美乱妇高清视频免欢看关 | 国产精品视频福利视频网 | 国产精品久久久久久久久鸭 | 淫香视频| 久久的精品99精品66 | 久久亚洲免费视频 | 99999久爱视频在线观看 | 国产福利久久 | 亚洲精品第一综合99久久 | 国内精品久久久久尤物 | 九九视频只有精品六 | 日韩a级片 | 99在线在线视频免费视频观看 | 97超级碰碰碰碰精品 | 国内精品久久久久久久亚洲 | 草久久久| 欧美亚洲日本国产 | 日本伊人 | 免费黄色a | 牛牛影院成人免费网页 | 亚洲欧美bt | 欧美一级视频精品观看 |