#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.