#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); }
Nguyễn Công Cường
Cấu trúc dữ liệu và thuật toán
[C/C++] Danh Sách Sinh Viên Bằng Danh Sách Liên Kết
Đăng ký:
Đăng Nhận xét (Atom)
Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.