資料結構之線性表 佇列的鏈式儲存

2021-08-17 12:53:24 字數 2853 閱讀 1352

1 基本概念

佇列是一種特殊的線性表,也可以用線性表的鏈式儲存來模擬佇列的鏈式儲存。鏈佇列的表述如下圖所示:

2 鏈式佇列儲存的設計與實現

其中鏈式佇列的實現是基於鏈式鍊錶設計的基礎上實現的,鍊錶的鏈式儲存設計實現請參考上篇

#ifndef _linkqueue_h_

#define _linkqueue_h_

typedef void linkqueue;

//建立佇列

linkqueue* linkqueue_create();

//銷毀佇列

void linkqueue_destroy(linkqueue * queue);

//清空佇列

void linkqueue_clear(linkqueue * queue);

//佇列追加

//出隊操作

void* linkqueue_retrieve(linkqueue * queue);

//獲取佇列頭

void* linkqueue_header(linkqueue * queue);

//佇列長度

int linkqueue_length(linkqueue * queue);

#endif

#include "linkqueue.h"

#include "linklist.h"

#include #include #include /*

基礎知識:

但是,平時使用的時候建議加上#include(尤其在以下情況下)

1、使用string型別

2、使用cin、cout語句來輸入輸出string型別變數(注意,同時還需要 #include)

3、使用memset()、strlen()、strcpy()等函式時

只要用到stdio裡面定義的庫函式,就要包含它

這些庫函式包括scanf,printf等等

是引用stdlib.h標頭檔案,即#include 。這裡的.h是不可缺少的。

stdlib.h中,包含了c語言的一些常用庫函式。如

動態記憶體相關的malloc, realloc,zalloc,calloc,free等。

隨機數相關的rand,srand等。

系統相關的system, getenv,setenv等。

字串轉數值函式,atoi, atof,strtoul等。

如果在**中,呼叫了這個標頭檔案中的函式或者巨集定義,則需要引用該標頭檔案。

*///鏈式佇列的結點定義

typedef struct _tag_linkqueuenode

tlinkqueuenode;

//建立乙個佇列:相當於建立乙個鍊錶

linkqueue* linkqueue_create()

//銷毀佇列

void linkqueue_destroy(linkqueue * queue)

//清空佇列 需要顯示的把佇列中的所有結點 搞出來

//釋放每乙個節點

void linkqueue_clear(linkqueue * queue)

linklist_clear(queue);

}//佇列追加:相當於在鍊錶的尾部進行元素的新增

memset(tmp,0,sizeof(tlinkqueuenode));//初始化

tmp->item = item;//節點轉換適配過程

//需要把佇列的業務結點 轉化成鍊錶的結點

ret = linklist_insert(queue, (linklistnode *)tmp, linklist_length(queue));

if (ret != 0)

return ret;

} return ret;

}//出隊操作 相當於 從線性表的頭部刪除元素

void* linkqueue_retrieve(linkqueue * queue)

//刪除之前快取

item = tmp->item;

if (tmp != null)

return item;

}//獲取佇列頭 相當於從線性表的0號位置 拿資料

void* linkqueue_header(linkqueue * queue)

return tmp->item;

}//佇列長度

int linkqueue_length(linkqueue * queue)

//佇列的鏈式儲存實現與設計測試框架.c

#include #include #include #include "linkqueue.h"

int main()

//往佇列新增元素

for (int i = 0; i < 5; i++) }

//佇列的屬性

printf("佇列的長度:%d\n",linkqueue_length(linkqueue));

ret = *((int *)linkqueue_header(linkqueue));

printf("佇列隊長是:%d\n",ret);

//出佇列

while (linkqueue_length(linkqueue) > 0)

//銷毀佇列

linkqueue_destroy(linkqueue);

system("pause");

return 0;

}

資料結構 線性表之鏈式儲存結構

資料結構定義 common.h ifndef hi comm h define hi comm h include include include include define list init size 100 線性表儲存空間的初始分配量 define list increment 10 線性表...

資料結構 鏈式儲存線性表

鏈式儲存結構的線性表 簡稱為鍊錶 將採用一組位址任意的儲存單元存放線性表中的資料元素,鏈式結構的線性表不會按線性的邏輯順序來儲存資料元素,它需要在每乙個資料元素裡儲存乙個引用下乙個資料元素的引用。優點 插入 刪除元素快,充分利用計算機記憶體空間 缺點 查詢元素需要整體遍歷,空間開銷大 單鏈表 cre...

線性表的鏈式儲存 資料結構

為了表示每個資料元素與其直接後繼資料元素之間的邏輯關係,除了儲存本身的資訊之外,還需儲存乙個指示其直接後繼的資訊 即直接後繼的儲存位置 我們把儲存資料元素資訊的位置稱為資料域,把儲存其直接後繼資訊的位置稱為指標域。這兩部分組成資料元素的結點 node 頭結點頭結點是為了操作的統一和方便而設立的,放在...