1. 程式人生 > >資料結構學習筆記-佇列的鏈式儲存(C語言實現)

資料結構學習筆記-佇列的鏈式儲存(C語言實現)

佇列是一種先進先出的線性表。是線性表就會有鏈式儲存,因為先進先出,鏈佇列就是在鏈尾進鏈頭出,這樣一來,定義鏈佇列時就需要定義兩個指標,分別指向佇列的隊頭(相當於頭指標)、隊尾。如果隊頭等於隊尾,則該鏈佇列為空。實現程式碼如下:
#include <stdio.h>
#include <stdlib.h>
typedef int LQEletype;
typedef struct QueueNode{
    LQEletype data;
    struct QueueNode *next;
}QueueNode;
typedef QueueNode *QueueP;//定義指向佇列節點的指標(相當於頭指標)
typedef struct LinkQueue{
    QueueP front,rear;//定義隊頭指標(相當於頭指標)、隊尾指標
}LinkQueue;
void init(LinkQueue *q){
    QueueP p=(QueueP)malloc(sizeof(QueueNode));
    p->next=NULL;
    q->front=p;//初始化一個空的鏈式佇列。
    q->rear=p;
}
void insertEle(LinkQueue *q,LQEletype e){
    QueueP p=(QueueP)malloc(sizeof(QueueNode));
    p->data=e;
    p->next=NULL;//因為插入時在佇列後邊插入,next為空
    q->rear->next=p;//讓隊尾指向插入的節點
    q->rear=p;//重新指定隊尾
}
void deleteEle(LinkQueue *q,LQEletype *e){
    if(q->front==q->rear){
        printf("該佇列為空");
        return ;
    }else{
        QueueP p=q->front->next;//拿到佇列的第一個資料
        *e=p->data;
        q->front->next=p->next;//
        if(q->rear==p){//如果拿到的這個資料節點恰巧是隊尾,就重新指定隊尾
            q->rear=q->front;
        }
        free(p);
    }
}
void getEle(LinkQueue q,LQEletype *e){
    if(q.front==q.rear){
        printf("該佇列為空");
        return ;
    }else{
        *e=q.front->next->data;
    }
}
int main()
{
    LinkQueue q;
    init(&q);
    LQEletype e,i=888;
    getEle(q,&e);
    printf("初始化後嘗試獲取佇列裡的值:\n%d\n",e);
    insertEle(&q,i);
    getEle(q,&e);
    printf("插入後獲取佇列裡的值:\n%d\n",e);
    deleteEle(&q,&i);
    getEle(q,&e);
    return 0;
}

相關推薦

資料結構學習筆記-線性表順序儲存C語言實現

寫了一天,終於將線性表的順序儲存實現了,順便惡補了一下指標內容。順序儲存,適合做查詢,鏈式儲存適合做增刪。新增方法主要就是將線性表從後往前遍歷,依次往後挪一位,直到空出想要插入的位置,刪除方法就是將線性表從要刪除的地方往後遍歷,依次往前挪一位。#include <std

資料結構學習筆記-佇列儲存C語言實現

佇列是一種先進先出的線性表。是線性表就會有鏈式儲存,因為先進先出,鏈佇列就是在鏈尾進鏈頭出,這樣一來,定義鏈佇列時就需要定義兩個指標,分別指向佇列的隊頭(相當於頭指標)、隊尾。如果隊頭等於隊尾,則該鏈佇

資料結構學習筆記-棧的儲存C語言實現

棧是一個特殊的線性表,後進先出,既然是線性表,就會分為順序儲存和鏈式儲存,下面就是棧的鏈式儲存部分,也稱作鏈棧。單鏈表是有頭指標頭節點的,通常鏈棧的棧頂就相當於頭指標,因為初始化的鏈棧是空的,即top=

資料結構—— 一元多項式的表示及相加C語言實現

程式碼比較簡單,沒有完全按照嚴蔚敏版《資料結構(C語言版)》上39頁到43頁上的要求,只是實現了簡單功能,且此程式碼輸入多項式時只能按升冪的順序輸入(因為沒有寫多項式排序的函式) 個人感覺此程式碼短小精悍,且易理解,看懂了的話可以嘗試完全按照書上的要求自己寫程式

資料結構之單鏈佇列(儲存佇列)的實現(C語言)

學習參考: 嚴蔚敏: 《資料結構-C語言版》 基本操作 入隊 出隊 建空佇列 判隊空 獲取隊首元素 獲取佇列長度 清空佇列 程式碼實現 佇列結點定義 typedef stru

資料結構與演算法——線性錶鏈儲存單迴圈連結串列

今天總結迴圈單鏈表 什麼是單迴圈連結串列? 單鏈表終端結點的指標域是指向空的,如果將其指向頭結點,這樣就形成了一個環,那麼這種首尾相接的環就夠成了單迴圈連結串列. 單鏈表中我們都是用頭指標來表示的,但是在單迴圈連結串列裡,用尾指標(指向最後一個節點)。為什麼要這樣,因為如果

資料結構學習筆記——堆疊之儲存結構c語言實現

棧的鏈式儲存結構使用單鏈表實現,同線性表一樣,鏈式儲存結構的堆疊在儲存空間的利用上顯得更加靈活,只要硬體允許一般不會出現溢位的情況。但鏈式棧相對於順序棧稍顯麻煩,若所需堆疊空間確定,順序棧顯得方便一些。關於鏈式和順序式的選擇視具體情況而定。 1.棧的鏈式儲存結構

資料結構線性表之儲存結構單鏈表(C++)

一. 標頭檔案—linkedlist.h 1 #ifndef _LIKEDLIST_H_ 2 #define _LIKEDLIST_H_ 3 4 #include <iostream> 5 6 template <class T> 7 struc

資料結構---閒心表:儲存結構

前面說到線性表的順序儲存結構,它的插入和刪除動作需要移動大量元素,費時。 原因:順序儲存結構的線性表,相鄰元素的儲存結構也是鄰居關係,中間沒有空隙,無法快速介入,而刪除的時候回留出空隙,需要彌補。 線性錶鏈式儲存結構定義 資料域(data):儲存資料元素資訊的域 指標

資料結構|二叉樹的儲存實驗6.2

一、實驗目的 1、   熟練理解樹和二叉樹的相關概念,掌握的儲存結構和相關操作實現; 2、   掌握樹的順序結構的實現; 3、   學會運用樹的知識解決實際問題 二、 實驗內容 1、自己確定一個二叉樹(樹結點型別、數目和結構自定)利用鏈式儲存結構方法儲存。實現樹

嚴蔚敏 資料結構 二叉樹儲存結構 遍歷等操作

課本 《資料結構(C語言版)(第2版)》 嚴蔚敏版 樹結構的學習。 編譯環境:DEV C++ 檔案格式為 cpp(c++檔案型別),前者的引用函式,在 C 的情況下沒完成。 實現: 二叉樹的先序遍歷

資料結構學習筆記——線性表之順序表c語言實現

1.概念 順序表即線性表的順序儲存結構 ,指的是用一段地址連續的儲存單元依次儲存線性表資料元素。線上性表中,每個資料元素的型別都相同,一般可以用一維陣列來實現順序儲存結構。 2.實現 (1)建立順序表的結構 利用c語言結構體來建立順序表的結構,順序表結構體中

棧的儲存結構c語言實現

#include <stdio.h> #include <stdlib.h> #define T 1 #define F 0 typedef int Status; type

資料結構學習筆記-迴圈連結串列C語言實現

  迴圈連結串列的概念主要就是讓單鏈表的尾節點的指標不為空並且指向頭節點。像這樣的迴圈連結串列和普通單鏈表除了判斷條件幾乎沒有任何區別,判斷條件就是從p->next是否為空改為p->next是否等於頭節點,如果等於頭節點則迴圈結束。#include <std

資料結構學習筆記-串C語言實現

串由零個或多個字元組成,說白了就是字串。串的儲存方式相對於線性表來講有些不同,他分為以下幾種:順序儲存、堆分配儲存、鏈式儲存。順序儲存通常在陣列中的頭元素存放字串長度。堆分配儲存通常會動態分配空間。鏈式儲存分為兩種,一種是每個節點存放一個字元(比較浪費空間),另一種則是每個節

數據結構-線性表的存儲相關算法C語言實現

存儲位置 lib 方法 lis 逆序 順序 程序 查詢 c語言 鏈表的簡單介紹 為什麽需要線性鏈表 當然是為了克服順序表的缺點,在順序表中,做插入和刪除操作時,需要大量的移動元素,導致效率下降。 線性鏈表的分類 按照鏈接方式: 按照實現角度: 線性鏈表的創建和簡單遍歷

資料結構——入棧,出棧,佇列相關操作C語言實現

閱讀過程之中可能會花費比較多的時間:建議直接翻到最後,有完整的程式碼可以使用 程式準備工作 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include<proc

資料結構:迴圈佇列C語言實現

生活中有很多佇列的影子,比如打飯排隊,買火車票排隊問題等,可以說與時間相關的問題,一般都會涉及到佇列問題;從生活中,可以抽象出佇列的概念,佇列就是一個能夠實現“先進先出”的儲存結構。佇列分為鏈式佇列和靜態佇列;靜態佇列一般用陣列來實現,但此時的佇列必須是迴圈佇列,否則

資料結構嚴蔚敏之五——迴圈佇列c語言實現

在這裡我先強調幾點概念: 1、在非空佇列中,頭指標始終指向佇列頭元素,而尾指標始終指向佇列尾元素的下一個位置。 2、在單佇列中我們判斷佇列是否為空的條件是:Q.front==Q.rear;而在迴圈佇列

資料結構中,幾種樹的結構表示方法C語言實現

//***************************************** //樹的多種結構定義 //***************************************** #define MAX_TREE_SIZE 100 typedef int TempType;