[C/C++] Danh Sách Sinh Viên Bằng Danh Sách Liên Kết

07:58
Danh Sách Liên Kết - Link List
danh sách sinh viên bằng danh sách liên kết

#include iostream
#include stdlib.h
using namespace std;
typedef struct SinhVien {
 char MaSV[30];
 char HoTen[30];
 int NamSinh;
 char Lop[30];
 float DTB;
};
typedef struct Node {
 SinhVien Data;
 Node* Next;
};

typedef struct Node* LinkList;

void InPutSV(SinhVien &sv) {
 fflush(stdin);
 cout << "Ma SV: ";
 cin.getline(sv.MaSV, 30);
 cout << "Ho ten: ";
 cin.getline(sv.HoTen, 30);
 cout << "Nam sinh: ";
 cin >> sv.NamSinh;
 fflush(stdin);
 cout << "Lop: ";
 cin.getline(sv.Lop, 30);
 cout << "DTB: ";
 cin >> sv.DTB;
}

void OutPutSV(SinhVien sv) {
 cout << "Ma SV: " << sv.MaSV << endl;
 cout << "Ho ten:" << sv.HoTen << endl;
 cout << "Nam sinh: " << sv.NamSinh << endl;
 cout << "Lop: " << sv.Lop << endl;
 cout << "DTB: " << sv.DTB << endl;
}
void InIt(LinkList& L) {
 L = NULL;
}

bool IsEmpty(LinkList L) {
 if (L == NULL) return true;
 return false;
}

int Quantity(LinkList L) {
 int temp = 0;
 for (Node* M = L; M != NULL; M = M->Next) {
  temp++;
 }
 return temp;
}
Node* AddNode(SinhVien x) {
 Node* P = (Node*)malloc(sizeof(Node));
 P->Data = x;
 P->Next = NULL;
 return P;
}

void AddHead(LinkList& L, SinhVien x) {
 Node* P = AddNode(x);
 if (IsEmpty(L)) L = P;
 else {
  P->Next = L;
  L = P;
 }
}

void AddTail(LinkList& L, SinhVien x) {
 Node* P = AddNode(x);
 if (IsEmpty(L)) L = P;
 else {
  Node* M = L;
  while (M->Next != NULL) {
   M = M->Next;
  }
  M->Next = P;
  P->Next = NULL;
 }
}

void AddAny(LinkList& L, int k, SinhVien x) {
 if (k < 1 || k > Quantity(L)) cout << "Not Add. " << endl;
 else {
  if (k == 1) AddHead(L, x);
  else {
   Node* P;
   P = AddNode(x);
   Node* M = L;
   int temp = 1;
   while (temp != k - 1 && M != NULL) {
    temp++;
    M = M->Next;
   }
   P->Next = M->Next;
   M->Next = P;
  }
 }
}

void DeleteHead(LinkList& L) {
 L = L->Next;
}
void DeleteTail(LinkList& L) {
 Node* M = L;
 while (M->Next->Next != NULL) {
  M = M->Next;
 }
 M->Next = M->Next = NULL;
}

void DeleteAny(LinkList& L, int k) {
 if (k < 1 || k> Quantity(L)) cout << "Not Delete." << endl;
 else {
  if (k == 1) DeleteHead(L);
  else {
   Node* M = L;
   int temp = 1;
   while (temp != k - 1 && M != NULL) {
    temp++;
    M = M->Next;
   }
   M->Next = M->Next->Next;
  }
 }
}
void InPut(LinkList& L, int n) {
 InIt(L);
 SinhVien x;
 for (int i = 0; i < n; i++) {
  cout << "Value " << i << endl;
  InPutSV(x);
  AddTail(L, x);
 }
}

void OutPut(LinkList L) {
 for (Node* M = L; M != NULL; M = M->Next) {
  OutPutSV(M->Data);
  cout << "-----------------------------------" << endl;
 }
}
int main() {
 LinkList L;
 int n, select;
 cout << "Quantity(So luong): ";
 cin >> n;
 InPut(L, n);
 do
 {
  system("cls");
  cout << "1. Add Head. " << endl;
  cout << "2. Add Tail. " << endl;
  cout << "3. Add Any. " << endl;
  cout << "4. Delete Head. " << endl;
  cout << "5. Delete Tail. " << endl;
  cout << "6. Delete Any. " << endl;
  cout << "9. OutPut. " << endl;
  cin >> select;
  switch (select)
  {
  case 1: {
     SinhVien x;
     InPutSV(x);
     AddHead(L, x);
     break;
  }
  case 2: {
     SinhVien x;
     InPutSV(x);
     AddTail(L, x);
     break;
  }
  case 3: {
     int k;
     cout << "Possity: ";
     cin >> k;
     SinhVien x;
     InPutSV(x);
     AddAny(L, k, x);
     break;
  }
  case 9: {
     OutPut(L);
     system("pause");
     break;
  }
  case 4: {
     DeleteHead(L);
     break;
  }
  case 5: {
     DeleteTail(L);
     break;
  }
  case 6: {
     int k;
     cout << "Possity Delete: ";
     cin >> k;
     DeleteAny(L, k);
     break;
  }
  }
 } while (select != 0);
}

Share this :

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.