隊列的實現及操作(C語言描述)

來源:互聯網
上載者:User

標籤:結構   隊列的實現   分配   操作   node   free   儲存   span   src   

//    隊列的單鏈表實現//    前端節點:哨兵作用,不存放資料,用來初始化隊列時使隊頭隊尾指向的地方//    首節點:前端節點後第一個節點,存放資料#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef int Elementype;        //    定義資料類型//    定義節點結構typedef struct Node {    Elementype Element;        //    資料域    struct Node * Next;}NODE, *PNODE;//    定義隊列結構體typedef struct QNode {    PNODE Front, Rear;        //    隊列頭,尾指標} Queue, *PQueue;//    聲明函數體void InitQueue(PQueue);    //    建立隊列函數bool IsEmptyQueue(PQueue);    //    判斷隊列是否為空白函數void InsertQueue(PQueue, int val);    //    入隊函數void DeleteQueue(PQueue,int * val);    //    出隊函數void DestroyQueue(PQueue);    //    摧毀隊列函數void TraverseQueue(PQueue);    //    遍曆隊列函數void ClearQueue(PQueue);    //    清空隊列函數int LengthQueue(PQueue);    //    求隊列長度函數//    主函數int main() {    int val = 0;    //    定義臨時變數    Queue queue;    //    建立隊列變數    InitQueue(&queue);    //    調用初始化隊列函數    IsEmptyQueue(&queue);    //    調用判斷隊列是否為空白函數    InsertQueue(&queue, 100);    //調用入隊函數    InsertQueue(&queue, 200);    InsertQueue(&queue, 300);    InsertQueue(&queue, 400);    InsertQueue(&queue, 500);    InsertQueue(&queue, 600);    IsEmptyQueue(&queue);    TraverseQueue(&queue);    //    調用隊列遍曆函數    DeleteQueue(&queue, &val);    //    調用出隊函數    TraverseQueue(&queue);    ClearQueue(&queue);        //    調用清空隊列函數    IsEmptyQueue(&queue);    DestroyQueue(&queue);    //    調用摧毀隊列函數    return 0;}//    定義隊列初始化函數void InitQueue(PQueue queue) {    queue->Front = queue->Rear = (PNODE)malloc(sizeof(NODE));    //    動態建立前端節點,使隊頭,隊尾指向該節點    //前端節點相當於哨兵節點的作用,不儲存資料(區別於首節點)    if (queue->Front == NULL) {        //    判斷記憶體是否分配成功        printf("建立隊列,無法分配所需記憶體...");        exit(-1);    }    queue->Front->Next = NULL;    //    初始隊列前端節點指標指向為空白    printf("建立隊列成功...\n");}//    定義判斷隊列是否為空白函數bool IsEmptyQueue(PQueue queue) {    if (queue->Front == queue->Rear) {        printf("隊列為空白...\n");        return true;    }    else {        //printf("隊列不為空白...\n");        return false;    }        }//    定義入隊函數//    從隊列尾部插入資料valvoid InsertQueue(PQueue queue,int val) {    PNODE P = (PNODE)malloc(sizeof(NODE));    //    建立一個新節點用於存放插入的元素    if (P == NULL) {        printf("記憶體配置失敗,無法插入資料%d...", val);        exit(-1);    }    P->Element = val;    //    把要插入的資料放到節點資料域    P->Next = NULL;        //    新節點指標指向為空白    queue->Rear->Next = P;    //    使上一個隊列尾部的節點指標指向建立的節點    queue->Rear = P;    //    更新隊尾指標,使其指向隊列最後的節點    printf("插入資料 %d 成功...\n", val);}//    定義出隊函數//    從隊列的首節點開始出隊//    若出隊成功,用val返回其值void DeleteQueue(PQueue queue,int* val) {    if (IsEmptyQueue(queue)) {        printf("隊列已經空,無法出隊...\n");        exit(-1);    }    PNODE  P= queue->Front->Next;    //    臨時指標    *val = P->Element;    //    儲存其值    queue->Front->Next = P->Next;        //    更新前端節點    if (queue->Rear==P)        queue->Rear = queue->Front;    free(P);    //    釋放頭隊列    P = NULL;    //    防止產生野指標    printf("出棧成功,出棧值為 %d\n", *val);}//    定義隊列遍曆函數void TraverseQueue(PQueue queue) {        if (IsEmptyQueue(queue)) {        exit(-1);    }            PNODE P = queue->Front->Next;    //從隊列首節點開始遍曆(非前端節點,注意區分)    printf("遍曆隊列結果為:");    while (P != NULL) {        printf("%d ", P->Element);        P = P->Next;    }    printf("\n");}//    定義隊列的摧毀函數//    刪除整個隊列,包括前端節點void DestroyQueue(PQueue queue) {    //從前端節點開始刪除    while (queue->Front != NULL) {        queue->Rear = queue->Front->Next;        free(queue->Front);        queue->Front = queue->Rear;    }    printf("摧毀隊列成功...\n");}//    定義清空隊列函數void ClearQueue(PQueue queue) {    PNODE P = queue->Front->Next;    //    臨時指標    PNODE Q = NULL;        //    臨時指標    queue->Rear = queue->Front;        //    使隊尾指標指向前端節點    queue->Front->Next = NULL;    //    從首節點開始清空    while (P != NULL) {        Q = P;        P = P->Next;        free(Q);    }    printf("清空隊列成功...\n");}

運行結果

隊列的實現及操作(C語言描述)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.