欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言數(shù)據(jù)結(jié)構(gòu)之鏈隊列的基本操作

 更新時間:2021年12月29日 16:18:30   作者:開始King  
這篇文章主要為大家介紹了C語言之鏈隊列的基本操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1.隊列的定義

隊列 (Queue)是另一種限定性的線性表,它只允許在表的一端插入元素,而在另一端刪除元素,所以隊列具有先進先出(Fist In Fist Out,縮寫為FIFO)的特性。在隊列中,允許插入的一端叫做隊尾(rear),允許刪除的一端則稱為隊頭(front)。 假設(shè)隊列為q=(a1,a2,…,an),那么a1就是隊頭元素,an則是隊尾元素。隊列中的元素是按照a1、a2、…、an的順序進入的, 退出隊列也必須按照同樣的次序依次出隊,也就是說,只有在a1、a2、…、an-1都離開隊列之后,an才能退出隊列。

2.隊列的表示和實現(xiàn)

在這里插入圖片描述

鏈隊列可以定義如下:

#define  TRUE    1
#define  FALSE  0
typedef struct QNode{
        QElemType  data;
        struct QNode *next;
}QNode, *QueuePtr;
typedef struct{
        QueuePtr  front;
        QueuePtr  rear;
}LinkQueue;

(1) 初始化操作

Status InitQueue(LinkQueue &Q)
{ 
       Q.front = Q.rear = (Queueptr) malloc(sizeof(QNode));
       if(!Q.front) exit ( OVERFLOW);
       Q.front ->next = NULL;
       return OK;
} 

(2)銷毀隊列

Status DestroyQueue(LinkQueue &Q)
{ 
        while(Q.front) {
	Q.rear = Q.front->next;
	free (Q.front);
	Q.front = Q.rear;
        }
        return OK;
}

(3) 入隊操作

Status EnQueue (LinkQueue &Q, QelemType e)
{ 
        p= (QueuePtr) malloc(sizeof(QNode));
        if (!p) exit ( OVERFLOW);
        p->data = e;  p->next = NULL;
        Q.rear -> next =p;
        Q.rear = p;
        return OK;
}

(4) 出隊操作

Status DeQueue (LinkQueue &Q, QelemType &e)
{
        if ( Q.front == Q.rear) return ERROR;
        p=Q.front->next;
        e=p->data;
        Q.front->next =p->next;
        if (Q.rear == p) Q.rear = Q.front;
        free(p);
        return OK;
}

附錄完整代碼:

#include<iostream>
using namespace std;
#define OK 1
#define FALSE 0

typedef int QElemType;
typedef int Status;

typedef struct QNode{
    QElemType data;
    struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
    QueuePtr font;
    QueuePtr near;
}LinkQueue;

Status InitQueue(LinkQueue &Q)
{
    Q.font=(QueuePtr)malloc(sizeof(QNode));
    if(!Q.font) exit(FALSE);
    Q.font->next=NULL;
    Q.near=Q.font;
    return OK;
}
Status QueueEmpty(LinkQueue Q)
{
    if(Q.font->next) return OK;
    return FALSE;
}
Status EnQueue(LinkQueue &Q,QElemType e)
{
    QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
    p->data=e;
    Q.near->next = p;
    Q.near = Q.near->next;
    p->next = NULL;
    return OK;
}
Status DeQueue(LinkQueue &Q,QElemType &e)
{
    if(!Q.font->next) return FALSE;
    QueuePtr p;
    p=Q.font->next;
    e=p->data;
    Q.font->next=p->next;
    if(Q.near==p) Q.near=Q.font;   //當是最后一個元素時,Q.font=NULL,Q.near=Q.font
    free(p);
    return OK;
}
Status ClearQueue(LinkQueue &Q)
{
    QueuePtr p;
    p=Q.font->next;
    QueuePtr q;
    while(p)
    {
        q=p;
        p=p->next;
        Q.font->next=p;
        free(q);
    }
    Q.near=Q.font;
    return OK;
}
void menu()
{
    cout<<"初始化隊列:1"<<endl;
    cout<<"入隊:2"<<endl;
    cout<<"出隊:3"<<endl;
    cout<<"清空隊列:4"<<endl;
    cout<<"退出:5"<<endl;
}
int main()
{
    LinkQueue Q;
    while(true)
    {
        int n;
        menu();
        scanf("%d",&n);
        int e=-1;
        switch(n)
        {
            case 1:
                InitQueue(Q);
                continue;
            case 2:
                printf("請輸入一個元素");
                scanf("%d",&e);
                EnQueue(Q,e);
                continue;
            case 3:
                DeQueue(Q,e);
                printf("\n出隊元素%d\n",e);
                continue;
            case 4:
                ClearQueue(Q);
                printf("清空成功\n");
                continue;
            default:
                break;
        }
        if(n==5)break;
    }

}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 詳解C++數(shù)組和數(shù)組名問題(指針、解引用)

    詳解C++數(shù)組和數(shù)組名問題(指針、解引用)

    這篇文章主要介紹了詳解C++數(shù)組和數(shù)組名問題(指針、解引用),指針的實質(zhì)就是個變量,它跟普通變量沒有任何本質(zhì)區(qū)別,指針本身是一個對象,同時指針無需在定義的時候賦值,具體內(nèi)容詳情跟隨小編一起看看吧
    2021-09-09
  • C語言鏈表與單鏈表詳解

    C語言鏈表與單鏈表詳解

    鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的,本章帶你詳細了解鏈表與單鏈表
    2022-02-02
  • C語言深入探究斐波那契數(shù)列

    C語言深入探究斐波那契數(shù)列

    斐波那契數(shù)一般指斐波那契數(shù)列。 斐波那契數(shù)列(Fibonacci sequence),又稱黃金分割數(shù)列,因數(shù)學家萊昂納多·斐波那契(Leonardo Fibonacci)以兔子繁殖為例子而引入,故又稱為兔子數(shù)列
    2022-05-05
  • C++操作文件進行讀取、刪除、修改指定行

    C++操作文件進行讀取、刪除、修改指定行

    今天小編就為大家分享一篇關(guān)于C++操作文件進行讀取、刪除、修改指定行,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C語言利用鏈表實現(xiàn)學生成績管理系統(tǒng)

    C語言利用鏈表實現(xiàn)學生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言如何利用鏈表實現(xiàn)學生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-11-11
  • gcc中extra qualification錯誤的解決

    gcc中extra qualification錯誤的解決

    今天小編就為大家分享一篇gcc中extra qualification錯誤的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C++ Boost log日志庫超詳細講解

    C++ Boost log日志庫超詳細講解

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • C語言中的運算符和結(jié)合性問題

    C語言中的運算符和結(jié)合性問題

    這篇文章主要介紹了C語言中的運算符和結(jié)合性問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 舉例理解C語言二維數(shù)組的指針指向問題

    舉例理解C語言二維數(shù)組的指針指向問題

    這篇文章主要介紹了C語言二維數(shù)組的指針指向問題,文中不建議用二級指針來訪問二維數(shù)組,需要的朋友可以參考下
    2015-12-12
  • 關(guān)于C++中數(shù)據(jù)16進制輸出的方法

    關(guān)于C++中數(shù)據(jù)16進制輸出的方法

    本文主要介紹了關(guān)于C++中數(shù)據(jù)16進制輸出的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03

最新評論