測試框架
#include#include#include#include"linkqueue.h"
void main()
for ( i = 0; i < 5; i++)
//求佇列的屬性
printf("len : %d",queue_lenght(queue));
printf("header : %d", *(int*)queue_header(queue));
//出佇列
while (queue_lenght(queue))
queue_destroy(queue);
}
標頭檔案:
linkqueue.h
//實現
#include#include#include#include"linkqueue.h" #include"linklist.h"
//佇列也是乙個特殊的線性表 //佇列的業務節點的資料結構 typedef struct linkqueuenode ; //建立佇列相當於銷毀線性表 linkqueue* queue_create() //銷毀佇列相當於銷毀線性表 //節點的額記憶體管理 void queue_destroy(linkqueue* queue) return ret; }
return ret; } //從佇列中刪除元素 相當於從線性表的頭部刪除元素 void* queue_retrieve(linkqueue* queue) //刪除之前快取 ret = tmp->item; if (tmp!=null) return ret; }
//獲取佇列頭部元素相當於從線性表的0號位置拿取資料 void* queue_header(linkqueue* queue)
return tmp->item; } //球隊列的長度相當於求線性表的長度 int queue_lenght(linkqueue* queue)
linklist.h
//實現
#include"linklist.h" #include#include#include
typedef struct tlinklist ; /*建立列表*/ linklist * list_create() /*釋放列表*/ void list_destory(linklist* list) return ; } /*清空列表 回到初始狀態*/ void list_clear(linklist* list) tlist = (tlinklist*)list; tlist->lenght = 0; tlist->header.next = null; return ; } /*獲取鍊錶的長度*/ int list_length(linklist* list) tlist = (tlinklist*)list;
return tlist->lenght; } /*獲取指定位置的鍊錶的元素資料*/ linklistnode* list_get(linklist* list, int pos) linklistnode* current = null; tlinklist* tlist = null; tlist = (tlinklist*)list; current = &(tlist->header); //讓輔助指標指向鍊錶的頭部 for ( i = 0; i < pos&&(current->next!=null); i++) return current->next; } /*插入元素資料*/ int list_inster(linklist* list, linklistnode* node, int pos) int i = 0, ret = 0; tlinklist* tlist = null; tlist = (tlinklist*)list; linklistnode* current = null; current = &(tlist->header); for ( i = 0; i < pos&&(current->next!=null); i++) node->next = current->next; current->next = node; tlist->lenght++; return 0; } /*元素資料刪除*/ linklistnode* list_delete(linklist* list, int pos) tlinklist* tlist = null; linklistnode* current = null; tlist = (tlinklist*)list; current = &(tlist->header); linklistnode* ret = null; for ( i = 0; i next!=null); i++) ret = current->next; current->next = ret->next; tlist->lenght--; return ret; }
資料結構 佇列(鏈式儲存)
資料結構和演算法 摘要 前一篇部落格主要討論迴圈佇列,但是迴圈佇列都是事先申請好空間,使用期間是不能釋放的。但是鏈佇列,每次都可以進行申請和釋放結點。再無法預估佇列長度的時候,我們可以考慮用鏈佇列。1 設計佇列資料結構 結點結構 typedef struct queue node queue nod...
資料結構 佇列的鏈式儲存
佇列的順序儲存 佇列的鏈式儲存 佇列的應用 列印楊輝三角 include include typedef struct nodenode,nodep typedef struct baglinklist linklistp void initialquene linklistp q intpushq...
資料結構 佇列 順序儲存結構佇列 鏈式儲存結構佇列
佇列是一種只允許在一端進行插入操作,而在另外一端進行刪除操作的線性表,特徵是先進先出,包括 順序儲存結 構佇列 鏈式儲存結構佇列。重點說明 迴圈佇列和鏈隊。在佇列中front為隊頭指標 rear為隊尾指標 佇列 佇列空的條件 rear front 佇列滿的條件 rear 1 queuesize fr...