Cài đt hàng đ ib ng danh sách liên kt

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật. (Trang 63 - 65)

cài đ t hàng đ i b ng danh sách liên k t, ta c ng s d ng 1 danh sách liên k t đ n và 2 con tr head và tail l u gi nút đ u và nút cu i c a danh sách. Vi c b sung ph n t m i s đ c ti n hành cu i danh sách và vi c l y ph n t ra s đ c ti n hành đ u danh sách.

Hình 4.4 Cài đ t hàng đ i b ng danh sách liên k t Khai báo 1 hàng đ i b ng danh sách liên k t nh sau:

struct node { int item;

struct node *next; };

typedef struct node *queuenode; typedef struct {

queuenode head; queuenode tail; }queue;

Khai báo t ng t nh ng n x p, tuy nhiên, hàng đ i s d ng 2 bi n là hea và tail đ l u gi đi m đ u và đi m cu i c a hàng. Khi đó, các thao tác trên hàng đ i đ c cài đ t nh sau:

Thao tác kh i t o hàng đ i

Thao tác này th c hi n vi c gán giá tr null cho nút đ u và cu i c a hàng đ i, cho bi t hàng

đ i đang tr ng thái r ng.

void QueueInitialize(queue *q){ q-> head = q-> tail = NULL; return;

}

Thao tác ki m tra hàng đ i r ng

Hàng đ i r ng n u nút đ u tr đ n NULL. int QueueEmpty(queue q){

return (q.head == NULL); }

Thao tác thêm 1 ph n t vào hàng đ i

void Put(queue *q, int x){ queuenode p;

p = (queuenode) malloc (sizeof(struct node)); p-> item = x;

p-> next = NULL; q-> tail-> next = p;

q-> tail = q-> tail-> next;

NULL

head

if (q-> head == NULL) q-> head = q-> tail; return;

}

thêm ph n t vào cu i hàng đ i, t o và c p phát b nh cho 1 nút m i. Gán giá tr thích h p cho nút này, sau đó cho con tr ti p c a nút cu i hàng đ i tr đ n nó. Nút này bây gi tr thành nút cu i c a hàng đ i. N u hàng đ i ch a có ph n t nào thì nó c ng chính là nút đ u c a hàng đ i.

L y ph n t ra kh i hàng đ i

l y ph n t ra kh i hàng đ i, ti n hành l y ph n t t i v trí nút đ u và cho nút đ u chuy n v nút k ti p. Tuy nhiên, tr c khi làm các thao tác này, ta ph i ki m tra xem hàng đ i có r ng hay không.

int Get(queue *q){ queuenode p;

if (QueueEmpty(*q)){

printf("Ngan xep rong !"); return 0; (adsbygoogle = window.adsbygoogle || []).push({});

}else{

p = q-> head;

q-> head = q-> head-> next; return p->item;

} }

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật. (Trang 63 - 65)