資料結構 佇列的鏈式儲存(10)

2021-08-20 11:31:59 字數 3037 閱讀 4249

測試框架

#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

#pragma once #ifdef _mylist_h_ #define _mylist_h_ #endif // _myseqlist_h_ typedef void linklist; typedef struct linklistnode ; /*建立列表*/ linklist * list_create(); /*釋放列表*/ void list_destory(linklist* list); /*清空列表 回到初始狀態*/ void list_clear(linklist* list); /*獲取鍊錶的長度*/ int list_length(linklist* list); /*獲取指定位置的鍊錶的元素資料*/ linklistnode* list_get(linklist* list, int pos); /*插入元素資料*/ int list_inster(linklist* list, linklistnode* node, int pos); /*元素資料刪除*/ linklistnode* list_delete(linklist* list, int pos);

//實現

#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...