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 頭結點頭結點是為了操作的統一和方便而設立的,放在...