Bài 8-Bài thực hành số 6.Hàng đợi cài đặt bằng danh sách liên kết đơn dùng 2 con trỏ

/*Cµi ®Æt hµng ®îi b»ng danh s¸ch liªn kÕt ®¬n 2 con trá qf vµ ql */

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

#include <alloc.h>

#define MAX 100   /*------------ Hang doi --------------- */

   typedef struct Node

   {

                                int data;

                                Node *next;

   };

void  MakeNullQ(Node **QF,Node **QL);

void  EnQueue(int x,Node **QF,Node **QL);// them x vao dau cua hang doi

void  Front  (int*x,Node **QF,Node **QL);//Lay phan tu o dau hang

void  DelQueue(Node **QF,Node **QL);     //Xoa phan tu o dau hang

/* Ch­¬ng tr×nh chÝnh  */

void main()

{  Node *QF, *QL; // QF tro den dau hang, QL tro den cuoi hang

 

               char ch; char tentep[20]; int v,x;

   do{clrscr(); menu(); ch=getch();

               switch(ch)

               {

                case '1': printf("\n\n\nTinh trang Hang doi:");

                                 HienthiHangdoi(&QF);

                                 printf("\nNhap mot so:"); scanf("%d",&x);

                                 EnQueue(x,&QF,&QL);// them vao cuoi

                                 break;

                case '2':HienthiHangdoi(&QF);   getch(); break;

                case '3':printf("\nHang doi ban dau la\n");

                                 HienthiHangdoi(&QF);

                                 XoaHangdoi(&QF);     // xoa o dau

                                 getch(); break;

               }

   }while (ch!=27);

}

// dinh nghia cac ham

void MakeNullQ(Node **QF,Node **QL)

   {

     (*QF) = NULL;  (*QL) = NULL;

   }

   // kiem tra xem Hang doi co rong hay khong , neu rong thi empty =1;

   int  EmptyQ(Node **QF)

   {

    if((*QF) == NULL)  return 1;

    else return 0;

   }

   // them x vao dau cua Hang doi

void  EnQueue(int x,Node **QF,Node **QL)

   {Node *p;

     p= new Node;   p->data = x;   p->next=NULL;

     if ( (*QF)== NULL){  // Hang rong, ca first va Last deu tro den p

                                              (*QF)= p;

                                              (*QL)= p;

                                     }

     else{ // chen vao duoi

                 (*QL)->next = p;

                 (*QL)       = p;

                }

    }

    void  DelQueue(Node **QF) //Xoa phan tu o dau hang

    { Node *p;

      if( (*QF) == NULL) printf("\nDanh sach rong");

      else{

                   p     =(*QF);

                   (*QF) =(*QF)->next;

                   delete(p);

                 }

    }

 void  Front(int *x, Node**QF)//Lay ra o dinh

    {

      Node *p;

                (*x)=(*QF)->data;

    }

    // Hien thi nhung khong xoa

    void HienthiHangdoi(Node **QF)

    { Node *p; int x;

      p=(*QF);

      if (p==NULL) { printf("Hang doi rong");

                                   return ;

                                 }

      while(p!=NULL)

      {

               printf("%4d",p->data);

               p=p->next;

      }

    }

void XoaHangdoi(Node **QF)

{ int x;

  printf("\nXoa hang doi\n");

  while( (*QF)!=NULL)

  { Front(&x,QF);

    DelQueue(QF);

    printf("\n Da xoa phan tu %d \n",x);

    HienthiHangdoi(QF);

  }

}

void menu()

{

      printf("\n\n THAO TAC TREN HANG DOI ");

      printf("\n 1.Nhap mot so, them vao cuoi hang");

      printf("\n 2.Hien thi hang doi");

      printf("\n 3.Xoa hang doi");

      printf("\n ESC ket thuc chuong trinh");

}

 

THAO TAC TREN HANG DOI

 1.Nhap mot so, them vao cuoi hang

 2.Hien thi hang doi

 3. Xoa hang doi

 ESC ket thuc chuong trinh

Hang doi ban dau la

   2   4   5

Xoa hang doi

 

 Da xoa phan tu 2

   4   5

 Da xoa phan tu 4

   5

 Da xoa phan tu 5

Hang doi rong

 

Bình luận

Bài viết khác

Bài 16- Thuật toán Ford -Fulkerson

Thuật toán Ford - Fulkerson  Việc chứng minh định lý luồng cực đại - lát cắt cực tiểu cho ta một thuật toán tìm luồng cực đại (thuật toán Ford- Fulkerson)

Bài 15-Cài đặt thuật toán Dijkstra

Năm 1959, Edsger W. Dijkstra đưa ra một thuật toán rất hiệu quả để giải bài toán đường đi ngắn nhất. Thuật toán thực hiện việc gán và giảm giá trị của nhãn tại mỗi đỉnh của đồ thị.

Bài 14-Thuật toán Prim

Thuật toán Prim do Robert Prim đưa ra vào năm 1957, ý tưởng chính của nó là lần lượt ghép vào cây khung các cạnh có trọng số tối thiểu liên thuộc với một đỉnh của cây mà không tạo ra chu trình trong cây. Thuật toán sẽ dừng khi có được n - 1 cạnh vào cây. Dưới đây là mô tả các bước của thuật toán Prim.

Bài 13-Cài đặt thuật toán Kruskal tìm cây khung tối thiểu

File dữ liệu về đồ thị dạng text;

ĐỐI TÁC CỦA CHÚNG TÔI