資料結構之佇列(炫技篇)

2021-06-22 13:00:56 字數 1721 閱讀 9596

我們已經實現了順序佇列和鏈式佇列,並且也做了優化,

那這篇文章到底是幹嘛呢!!簡單四個字,**復用!!!

第十二個例子,**復用佇列的實現:

標頭檔案

#ifndef _squeue_h_

#define _squeue_h_

typedef void squeue;

squeue* squeue_create();

void squeue_destroy(squeue* queue);

void squeue_clear(squeue* queue);

int squeue_length(squeue* queue);

void* squeue_retrieve(squeue* queue);

void* squeue_header(squeue* queue);

#endif

實現檔案

#include "squeue.h"

#include "linkstack.h"

#include typedef struct tag_squeue

tsqueue;

squeue* squeue_create()

if (ret->outstack != null)

free(ret);

ret = null;}}

return ret;

}void squeue_destroy(squeue* queue)

void squeue_clear(squeue* queue)

}

}int squeue_length(squeue* queue)

return ret;

}void* squeue_retrieve(squeue* queue)

}ret = linkstack_pop(squeue->outstack);

}

return ret;

}void* squeue_header(squeue* queue)

}ret = linkstack_top(squeue->outstack);

} return ret;

}

這裡我們全部是復用前面寫好的**,核心思想是,用2個棧,乙個棧只負責入

棧,另乙個只負責出棧,把兩個棧看成乙個整體,就跟佇列效果一樣,先進先出。

測試檔案

#include #include #include "squeue.h"

int main(int argc, char *argv)

; int i = 0;

for (i = 0; i < 10; i++)

printf("length:%d\n", squeue_length(queue));

printf("header:%d\n", *((int*)squeue_header(queue)));

while (squeue_length(queue) > 0)

squeue_clear(queue);

squeue_destroy(queue);

system("pause");

return 0;

}

好了,看起來是不是很簡潔明瞭,所以說**復用的思想很重要!!!

資料結構之佇列篇

關於佇列 實現佇列 佇列的操作 實現佇列介面 佇列介面 author wbkearly param 佇列中元素型別 public inte ce queue 基於array 之前部落格中定義的array類 實現佇列 arrayqueue 基於array實現的佇列 author wbkearly pa...

JackDan資料結構篇之優先佇列

什麼是優先佇列?在最小優先佇列 min priority queue 中,查詢操作用來搜尋優先權最小的元素,刪除操作用來刪除該元素 對於最大優先佇列 max priority queue 中,查詢操作用來搜尋優先權最大的元素,刪除操作用來刪除該元素。優先權佇列中的元素可以有相同的優先權,查詢或刪除操...

資料結構(佇列實現篇)

在資料結構與演算法中,佇列queue是一種受限的線性儲存結構,特殊之處在於它只允許在表的前端front進行刪除操作,而在表的後端rear進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。遵循先進先出fifo的規則。佇列結構示意圖 佇列結構使用 ...