基本資料結構之-順序佇列
順序佇列就是對開闢在堆上的一段連續空間的操作
佇列有入隊和出隊的操作,如果把開始的位置作為隊頭,那麼在入隊的時候需要移動資料,如果把末尾做為隊頭,在出隊的時候需要移動元素,所以使用哪種方法都沒有簡單的,
其實可以指定兩個引數來標記佇列中隊頭和對尾的位置,但是在入隊和出隊的時候就需把這種情況考慮進去。(其實這就成了迴圈佇列了,哈哈)
今天還是寫順序佇列吧
//分析需要乙個容量(因為需要動態的開闢空間來儲存資料)
// 需要乙個長度來記錄當前資料的長度
typedef struct _orderqueue
orderqueue;
初始化,
// 初始化
int init_orderqueue(void **orderqueue, int capacity)
// 將資料轉化為我們可以操作的型別
orderqueue **queue = (orderqueue **)orderqueue;
while(*queue == null)
// 開闢資料區的容量
(*queue)->data = (void **)malloc(sizeof(void *)*capacity);
memset((*queue)->data, 0, sizeof(void *)*capacity);
if ((*queue)->data ==null)
(*queue)->capacity = capacity;
(*queue)->size = 0;
return 0;
// 入隊
int push_orderqueue(void *orderqueue, void *data)
if (data == null)
// 將資料轉化為我們可以操作的型別
orderqueue *queue = (orderqueue *)orderqueue;
// 當容量和長度相同時,需要開闢其他的空間
if (queue->size==queue->capacity)
// 將新開闢的空間置零
memset(newqueue, 0, sizeof(void *)*queue->capacity);
// 將原來的資料拷貝到現在的空間來
memcpy(newqueue, queue->data, sizeof(void *)*queue->size);
// 釋放原來的空間
free(queue->data);
// 將資料指標指向新空間
queue->data = newqueue;
}// 將資料插入到佇列中
queue->data[queue->size] = data;
++queue->size;
return 0;
}// 出隊
int pop_orderqueue(void *orderqueue)
// 將資料轉化為我們可以操作的型別
orderqueue *queue = (orderqueue *)orderqueue;
if (queue->size == 0)
// 當佇列不為空時,出隊
for (int i = 0; i < queue->size - 1; ++i)
queue->data[queue->size - 1] = null;
--queue->size;
return 0;
}// 獲取隊頭元素
void *back_orderqueue(void *orderqueue)
// 將資料轉化為我們可以操作的型別
orderqueue *queue = (orderqueue *)orderqueue;
if (queue->size == 0)
return queue->data[queue->size - 1];
}void *front_orderqueue(void *orderqueue)
// 將資料轉化為我們可以操作的型別
orderqueue *queue = (orderqueue *)orderqueue;
return queue->data[0];
}int destory_orderqueue(void *orderqueue)
// 將資料轉化為我們可以操作的型別
orderqueue *queue = (orderqueue *)orderqueue;
if (queue->data != null)
free(queue);
return 0;
}int size_orderqueue(void *orderqueue)
// 將資料轉化為我們可以操作的型別
orderqueue *queue = (orderqueue *)orderqueue;
return queue->size;
佇列 順序佇列
建立順序佇列結構必須為其靜態分配或動態申請一片連續的儲存空間,並設定兩個指標進行管理。乙個是隊頭指標front,它指向隊頭元素 另乙個是隊尾指標rear,它指向下乙個入隊元素的儲存位置。typedef struct queue queue,pqueue queue.h整體結構 typedef int...
迴圈佇列 順序佇列
在前兩篇中講述了順序佇列中的隊頭移動與不移動兩種順序佇列,今天討論順序佇列中的迴圈佇列,這種迴圈佇列是用一維陣列實現的。在隊頭移動的情況下,根據元素個數與佇列容量之間的數量關係來解決假溢位問題。從上圖中我們可以理解為什麼這種佇列結構可以解決假溢位問題,但是隨之而來,我們要如何判定迴圈佇列已滿呢?在此...
佇列 順序迴圈佇列
順序佇列 sequence queue 用一片連續的儲存空間來儲存佇列中的資料元素.用一維陣列來存放順序佇列中的資料元素。隊頭位置設在陣列下標為 0 的端,用 front 表示 隊尾位置設在陣列的另一端,用 rear 表示。front 和 rear 隨著插入和刪除而變化。當隊列為空時,front r...