



















Preview text:
Tổ chức lưu trữ dslk đơn typedef struct NODE {  DATA info;  NODE* pNext;  } NODE; typedef struct {  NODE* pHead; } LIST; Các thao tác cơ bản
Khởi tạo danh sách rỗng: gán pHead = NULL
void Initialize(LIST &list)  {  list.pHead = NULL;  } Các thao tác cơ bản
Kiểm tra danh sách có rỗng hay không: kiểm tra pHead có bằng NULL  hay không
Kiểm tra danh sách có đầy hay chưa: không kiểm tra được tính đầy đối  với DSLK bool IsEmpty(LIST list)  {  if (list.pHead == NULL)  return true;  return false;  } Duy t danh sách: cho con tr ệ  p ch
ỏ y tạ đầầu đếến cuốếi danh sá ừ ch Ph i tha ả
y Process bằầng tến hàm t ng  ươ ng ứ void Process (LIST list)  {  NODE* p = list.pHead;  while (p != NULL) {  p = p->pNext;  }  } Tìm kiếếm m t phầần t ộ  trong danh s ử
ách: nếếu tm thầếy tr vếầ con tr ả  p, ng ỏ c l ượ i tr ạ  vếầ N ả ULL
NODE* Search(LIST list, DATA x)  {  NODE* p = list.pHead;  while (p != NULL)  {  if (p->info == x) break;  p = p->pNext;  }  return p;  }
NODE* Search2(LIST list, DATA x, NODE* &q)  {  NODE* p = list.pHead;  while (p != NULL)  {  if (p->info == x) break;  q = p;  p = p->pNext;  }  return p; } Thếm m t phầần t ộ  v
ử ào danh sách • B1: T o m ạ t phầần t ộ  trong b ử   ộ nhớ NODE* CreateNode(DATA x) {  NODE* p = new NODE;  if (p != NULL)  { p->info = x;  p->pNext = NULL;  }  return p;  } Thếm m t phầần t ộ  v ử ào danh sách  • B2: Gằến phầần t v ử a t ừ o v ạ ào danh sách 
• Gằến vào đầầu danh sách
NODE* InsertHead(LIST &list, DATA x)  {  NODE* p = CreateNode(x);  if (p != NULL)  {  p->pNext = list.pHead;  list.pHead = p;  }  return p;  } Thếm m t phầần t ộ  v ử ào danh sách B2: Gằến phầần t v ử a t ừ o v ạ ào danh sách
Gằến vào sau phầần t q ử
NODE* InsertAfter(LIST &list, NODE* q, DATA x)  { NODE* p = CreateNode(x);  if (p != NULL)  {  p->pNext = q->pNext;  q->pNext = p;  }  return p;  } • Xóa m t phầần t ộ  kh ử i danh sách ỏ  • Xóa phầần t đ ử ng sau phầần t ứ  q ử
bool DeleteAfter(LIST &list, NODE* q)  {  if (q != NULL)   {  NODE* p = q->pNext;  if (p != NULL)   {  q->pNext = p->pNext;  delete p;  return true;   }   }  return false;  } Xóa m t phầần t ộ  kh ử i danh sách  ỏ • Xóa phầần t có gi ử á tr X ị
bool DeleteNode(LIST &list, DATA x)  {  NODE* q = NULL;  NODE* p = Search2(list, x, q);  if (p == NULL) return false;  if (q == NULL) return DeleteHead(list); else return DeleteAfter(list, q); } Xóa hếết danh sách  void DeleteAll(LIST &list)  {  while ( DeleteHead(list) );  } Stack và queue Khởi t o rốỗng ạ void Initialize(LIST &s)  {  s.pHead = NULL;  } Ki m tra c ể ó rốỗng hay khống bool IsEmpty(LIST s)  {  if (s.pHead == NULL)  return true;  return false;  } Thếm m t phầần t ộ  v ử ào đ nh Stack  ỉ
bool Push(LIST &s, DATA x)  {  NODE* p = InsertHead(s,x);  if (p != NULL)  return true;  return false;  } Lầếy ra m t phầần t ộ  kh ử i đ ỏ nh Stac ỉ k DATA POP (LIST &s)  {  if ( !IsEmpty(s) )  {  DATA x = s.pHead->info;  DeleteHead(s);  return x;  }  return NULL; } Xem thống tin phầần t  ử đ ở nh Stack  ỉ DATA GetTop(LIST s)  {  if ( !IsEmpty(s) )  {  DATA x = s.pHead->info;  return x;  }  return NULL;  } L u tr ư ữ d i d ướ ng DSĐ ạ  #define N 100  typedef struct  {  int front;  int rear;  DATA a[N];  } CQUEUE; L u tr ư ữ d i d ướ ng DSLK ạ typedef struct NODE  {  DATA info;  NODE* pNext;  } NODE;  typedef struct  {  NODE* pHead;  NODE* pTail;  } LQUEUE; Khởi t o rốỗng  ạ
void Initialize(LQUEUE &q)  {  q.pHead = NULL;  q.pTail = NULL;  } Ki m tra c ể ó rốỗng hay khống  bool IsEmpty(LQUEUE q)  {  if (q.pHead == NULL)   return true;  return false;  } Thếm m t phầần t ộ  v ử ào cuốếi 
Queue bool Push(LQUEUE &q, DATA x)  {  NODE* p = InsertTail(q,x);  if (p != NULL)  return true;  return false;  } Lầếy ra m t phầần t ộ  ử đầầu Queue  ở DATA Pop(LQUEUE &q)  {  if ( !IsEmpty(q) )  {  DATA x = q.pHead->info;  DeleteHead(q);  return x;  }  return NULL;  } DATA GetFront(LQUEUE q)  {  if ( !IsEmpty(q) )  {  DATA x = q.pHead->info;  return x;  }  }  return NULL;  }  DATA GetRear(LQUEUE q)  {  if ( !IsEmpty(q) ) { {   DATA x = q.pTail->info;   return x;  }  return NULL;  }
Bài 11-13: Cây, Cây nh phân, Câ ị y BST, Cây cân bằằng typedef struct BNODE  {  int info;  BNODE* left;  BNODE* right;  } BNODE;  BNODE* CreateNode(int x)  {  BNODE* p = new BNODE;   if (p != NULL)   {   p->info = x;   p->left = NULL;   p->right = NULL;  }  return p;  } typedef struct  {  BNODE* root;  } BTREE; 
void Initialize(BTREE &tree)  {   tree.root = NULL;  } 
void CreateBTree(BNODE* &p)  {  int x; 
 printf(“\n Nhap vao gia tri cua nut: “);   scanf(“%d”, &x);   if (x == -1) return;   p = CreateNode(x);   if (p != NULL) { 
 printf(“\n Nhap cay con ben trai cua nut %d: “,x);   CreateBTree(p->left); 
 printf(“\n Nhap cay con ben phai cua nut %d: “,x);   CreateBTree(p->right);   }  }
void PrintTree(BNODE* p, int k) {  if (p == NULL)  return;  
