前篇算是開宗明義,此篇接續第一部分的單向佇列資料結構。
1、設計
佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元素稱為出隊。因為佇列只允許在一端插入,在另一端刪除,所以只有最早進入佇列的元素才能最先從佇列中刪除,故佇列又稱為先進先出(fifo—first in first out)線性表。從上可知,佇列首先是乙個線性表,也就是說其資料元素是按照順序存放在乙個連續的記憶體空間內的。然後遵頊先入先出原則,所以刪除和新增的操作,只能從隊尾和隊頭進行操作。
所以我們這麼設計(和前篇的鍊錶不一樣,這裡的設計是完全遵照基本的佇列結構來的,所以算是通用的設計原理):
struct queue
;typedef
struct queue t_queue;
void
q_initqueue
(t_queue *queue)
;int
q_additem
(t_queue *queue,
int item)
;int
q_isempty
(const t_queue queue)
;int
q_deleteitem
(t_queue *queue)
;int
q_count
(const t_queue queue)
;int
q_indexof
(const t_queue queue,
int item)
;void
q_printqueue
(const t_queue queue)
;
2、實現**#define ok 1
#define error -1
#define fail -1
#define yes 1
#define no -1
#define dmax 100
void
q_initqueue
(t_queue *queue)
intq_isempty
(const t_queue queue)
return no;
}int
q_additem
(t_queue *queue,
int item)
queue->data[queue->tail]
= item;
queue->tail++
; queue->count++
;return ok;
}int
q_deleteitem
(t_queue *queue)
queue->head++
; queue->count--
;return ok;
}int
q_count
(const t_queue queue)
intq_indexof
(const t_queue queue,
int item)
}return no;
}void
q_printqueue
(const t_queue queue)
for(
int i = queue.head; i < queue.tail; i++
)printf
("\r\n");
}
雖然不想這麼直接貼**上來,但是其實也沒什麼好講的。
3、測試
t_queue queue;
q_initqueue
(&queue)
;q_additem
(&queue,12)
;q_additem
(&queue,6)
;q_additem
(&queue,8)
;q_additem
(&queue,0)
;q_additem
(&queue,9)
;q_additem
(&queue,-9
);q_additem
(&queue,
1023);
q_additem
(&queue,65)
;q_additem
(&queue,7)
;q_printqueue
(queue)
;q_deleteitem
(&queue)
;q_deleteitem
(&queue)
;q_printqueue
(queue)
;int index =
q_indexof
(queue,1)
;printf
("%d\n"
, index)
;index =
q_indexof
(queue,65)
;printf
("%d\n"
, index)
;index =
q_indexof
(queue,7)
;printf
("%d\n"
, index)
;printf
("the count is:%d\n"
,q_count
(queue));
return
0;
測試結果如下:
4、小結
下一章我將實現順序表和堆疊(棧,stack),因為順序表完全類似於陣列,所以我會使用節點+順序表這種方式來模擬整個陣列的操作方式。
資料結構單鏈表的基本操作(純c語言)
標頭檔案 ifndef slinklist h include include define eoe 1 typedef int elemtype typedef struct node node typedef node list list initilist list l list create...
資料結構 鍊錶(純c語言實現)
include include typedef struct nodelnode,linklist linklist greatlinklist int n return list 實現鍊錶的插入操作。1 前驅結點不用找,前驅結點是作為函式的引數的,用來搞清要插入的結點的位置。2 將前驅結點的指標域...
資料結構 串的基本操作c 實現
include include using namespace std define maxsize 20 void initstr struct stringsq p 初始化 intstrlength struct stringsq p 求字串的長度 void createstr struct s...