Vy Thanh Định- Web Master
- Giới tính : Bài gửi : 228
Tổng Điểm : 544
Điểm Thưởng : 16
Sinh Nhật : 19/05/1990 Bị Dụ Dỗ : 11/09/2009
Tuổi : 34
by Vy Thanh Định 28/11/2009, 18:11
- Code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAXQUEUE 100
#define TRUE 1
#define FALSE 0
// Khai bao cau truc pqueue
struct pqueue
{
int rear; // front luon la 0
int nodes[MAXQUEUE]; // moi nut la mot so nguyen chi do uu tien
};
// Tac vu pqinitialize: khoi dong hang doi co uu tien
void pqinitialize(struct pqueue *ppq)
{
ppq->rear = -1;
}
// Tac vu pqempty: kiem tra hang doi co rong khong
int pqempty(struct pqueue *ppq)
{
return((ppq->rear == -1) ? TRUE : FALSE);
}
// Tac vu pqueuesize: xac dinh so nut co trong hang doi
int pqueuesize(struct pqueue *ppq)
{
return(ppq->rear+1);
}
// Tac vu pqinsert: them nut vao hang doi co uu tien
void pqinsert(struct pqueue *ppq, int x)
{
int i, j;
if(ppq->rear == MAXQUEUE-1)
printf("Hang doi bi day, khong them nut duoc");
else
{
// tim vi tri chen
for(i = 0; i < pqueuesize(ppq) && ppq->nodes[i] >= x; i++)
;
// doi cho cac nut tu nut cuoi den nut i+1 len mot vi tri
for (j = pqueuesize(ppq) ; j > i; j--)
ppq->nodes[j] = ppq->nodes[j-1];
ppq->nodes[i] = x;
ppq->rear++;
}
}
/* Tac vu pqremove: xoa nut co do uu tien cao nhat (nut o front), truong hop
nay ta phai doi cac nut tu nut thu hai den nut cuoi xuong mot vi tri */
int pqremove(struct pqueue *ppq)
{
int x, i;
if(pqempty(ppq))
printf("Hang doi bi rong, khong xoa nut duoc");
else
{
x = ppq->nodes[0]; // do uu tien cua nut can xoa
// doi cho
for (i = 0; i < ppq->rear; i++)
ppq->nodes[i] = ppq->nodes[i+1];
ppq->rear--;
return x;
}
}
// Tac vu pqtraverse: duyet hang doi co uu tien tu front den rear
void pqtraverse(struct pqueue *ppq)
{
int i;
if(pqempty(ppq))
printf("hang doi bi rong");
else
for(i = 0; i <= ppq->rear; i++)
printf("%d ", ppq->nodes[i]);
}
void main(void)
{
struct pqueue pq;
int douutien, chucnang;
char c;
// clrscr();
// khoi dong hang doi
pqinitialize(&pq);
do
{
// menu chinh cua chuong trinh
printf("\n\n\t\tCHUONG TRINH MINH HOA HANG DOI CO UU TIEN\n");
printf("\nCac chuc nang cua chuong trinh:\n");
printf(" 1: Them nut vao hang doi co uu tien\n");
printf(" 2: Xoa nut co do uu tien cao nhat\n");
printf(" 3: Xoa toan bo hang doi\n");
printf(" 4: Duyet hang doi\n");
printf(" 0: Ket thuc chuong trinh\n");
printf("Chuc nang ban chon: ");
scanf("%d", &chucnang);
switch(chucnang)
{
case 1:
{
printf("\nDo uu tien cua nut moi: ");
scanf("%d", &douutien);
pqinsert(&pq, douutien);
break;
}
case 2:
{
pqremove(&pq);
break;
}
case 3:
{
printf("\nBan co chac khong (c/k): ");
c = getche();
if(c == 'c' || c == 'C')
pqinitialize(&pq);
break;
}
case 4:
{
printf("\nDuyet hang doi: ");
pqtraverse(&pq);
break;
}
}
} while(chucnang != 0);
}