C資料結構 優化順序佇列

2021-08-09 03:53:46 字數 2279 閱讀 8553

如果直接復用之前的順序表,那麼在佇列的入隊和出隊操作裡,勢必會有乙個操作的時間複雜度是o(n),因為發生了陣列元素的挪移操作。下面是優化後的順序佇列,其中使用了乙個頭位置和乙個尾位置來迴圈的使用陣列空間,以達到入隊和出隊的時間複雜度都是o(1)。

#ifndef optseqqueue

#define optseqqueue

#ifndef null

#define null 0

#endif

/* 元素型別 */

typedef int elem_t;

/* 順序表結構體 */

typedef struct

opt_seq_queue;

/** * 優化順序佇列初始化

* @param capacity

* @return

*/opt_seq_queue *opt_seq_queue_init(int capacity);

/** * 入隊

* @param p 佇列指標

* @return 成功:1,失敗:0

*/int opt_seq_queue_enqueue(opt_seq_queue *p,elem_t *pe);

/** * 出隊

* @param p 佇列指標

* @return 返回元素的值

*/elem_t opt_seq_queue_dequeue(opt_seq_queue *p);

/** * 獲取對頭元素的值

* @param p 佇列指標

* @return

*/elem_t opt_seq_queue_header(opt_seq_queue *p);

/** * 獲取佇列長度

* @param p

* @return

*/int opt_seq_queue_length(opt_seq_queue *p);

/** * 佇列清空

* @param p

* @return

*/int opt_seq_queue_clear(opt_seq_queue *p);

/** * 銷毀佇列

* @param p

* @return

*/int opt_seq_queue_destroy(opt_seq_queue *p);

#endif // optseqqueue

#include "optseqqueue.h"

#include /**

* 優化順序佇列初始化

* @param capacity

* @return

*/opt_seq_queue *opt_seq_queue_init(int capacity)

return plist;

}/**

* 入隊

* @param p 佇列指標

* @return 成功:1,失敗:0

*/int opt_seq_queue_enqueue(opt_seq_queue *p,elem_t *pe)

return ret;

}/**

* 出隊

* @param p 佇列指標

* @return 返回元素的值

*/elem_t opt_seq_queue_dequeue(opt_seq_queue *p)

return temp;

}/**

* 獲取對頭元素的值

* @param p 佇列指標

* @return

*/elem_t opt_seq_queue_header(opt_seq_queue *p)

return temp;

}/**

* 獲取佇列長度

* @param p

* @return

*/int opt_seq_queue_length(opt_seq_queue *p)

return ret;

}/**

* 佇列清空

* @param p

* @return

*/int opt_seq_queue_clear(opt_seq_queue *p)

return ret;

}/**

* 銷毀佇列

* @param p

* @return

*/int opt_seq_queue_destroy(opt_seq_queue *p)

return ret;

}

C 資料結構 9 順序佇列

佇列 先進先出 fifo 或者後進後出 lilo templatequeue queue int capacity capacity capacity 初始化建構函式 templatequeue queue templatebool queue isempty const 判斷是否為空 templa...

資料結構順序佇列

佇列是一種特殊的 線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。順序佇列 ifndef sqqueue h define sqqueue h incl...

資料結構 順序佇列

1 佇列簡稱隊,它是一種操作受限的線性表,其限制為在標的一段進行插入,而在包的另一端進行刪除。把進行插入的一端稱為隊尾 rear 把進行刪除的一端稱作隊頭或隊首 front 向佇列中插入新元素稱為進隊或入隊,新的元素進隊後就成為新的隊尾元素 從佇列中刪除元素稱為出隊或離隊,元素出隊後,其直接後繼元素...