Information Technology VietNam

Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

    Hàng đợi có ưu tiên

    Vy Thanh Định
    Vy Thanh Định
    Web Master
    Web Master


    Giới tính : Nam 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

    Hàng đợi có ưu tiên Empty Hàng đợi có ưu tiên

    Bài gửi 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);
    }

      Hôm nay: 25/11/2024, 15:48