Untitled
unknown
plain_text
a year ago
5.0 kB
10
Indexable
#include <iostream>
using namespace std;
// Định nghĩa cấu trúc Node
struct Node {
int data;
Node* next;
};
// Định nghĩa cấu trúc DSLK
struct LinkedList {
Node* head;
LinkedList() : head(nullptr) {}
// Phương thức thêm đầu
void themDau(int x) {
Node* newNode = new Node();
newNode->data = x;
newNode->next = head;
head = newNode;
}
// Phương thức thêm cuối
void themCuoi(int x) {
Node* newNode = new Node();
newNode->data = x;
newNode->next = nullptr;
if (head == nullptr) {
head = newNode;
} else {
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
}
}
// Phương thức thêm sau một phần tử
void themSau(int x, int y) {
Node* temp = head;
while (temp != nullptr && temp->data != y) {
temp = temp->next;
}
if (temp != nullptr) {
Node* newNode = new Node();
newNode->data = x;
newNode->next = temp->next;
temp->next = newNode;
} else {
cout << "Khong tim thay phan tu " << y << " trong danh sach." << endl;
}
}
// Phương thức kiểm tra phần tử x có tồn tại không
bool tonTai(int x) {
Node* temp = head;
while (temp != nullptr) {
if (temp->data == x) return true;
temp = temp->next;
}
return false;
}
// Phương thức xóa đầu
void xoaDau() {
if (head != nullptr) {
Node* temp = head;
head = head->next;
delete temp;
}
}
// Phương thức xóa phần tử sau node q
void xoaSau(int y) {
Node* temp = head;
while (temp != nullptr && temp->data != y) {
temp = temp->next;
}
if (temp != nullptr && temp->next != nullptr) {
Node* nodeToDelete = temp->next;
temp->next = temp->next->next;
delete nodeToDelete;
} else {
cout << "Khong co phan tu nao de xoa sau phan tu " << y << "." << endl;
}
}
// Phương thức xuất các phần tử chẵn
void xuatChan() {
Node* temp = head;
while (temp != nullptr) {
if (temp->data % 2 == 0) {
cout << temp->data << " ";
}
temp = temp->next;
}
cout << endl;
}
// Phương thức xuất danh sách
void xuatDanhSach() {
Node* temp = head;
while (temp != nullptr) {
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
};
// Hàm main
int main() {
LinkedList list;
int choice, x, y;
do {
cout << "\nMenu:\n";
cout << "1. Them dau\n";
cout << "2. Them cuoi\n";
cout << "3. Them sau mot phan tu\n";
cout << "4. Kiem tra phan tu ton tai\n";
cout << "5. Xoa dau\n";
cout << "6. Xoa sau mot phan tu\n";
cout << "7. Xuat cac phan tu chan\n";
cout << "8. Xuat danh sach\n";
cout << "0. Thoat\n";
cout << "Nhap lua chon: ";
cin >> choice;
switch (choice) {
case 1:
cout << "Nhap gia tri: ";
cin >> x;
list.themDau(x);
break;
case 2:
cout << "Nhap gia tri: ";
cin >> x;
list.themCuoi(x);
break;
case 3:
cout << "Nhap gia tri can them: ";
cin >> x;
cout << "Nhap gia tri phan tu y: ";
cin >> y;
list.themSau(x, y);
break;
case 4:
cout << "Nhap gia tri can kiem tra: ";
cin >> x;
if (list.tonTai(x)) {
cout << "Phan tu " << x << " ton tai trong danh sach.\n";
} else {
cout << "Phan tu " << x << " khong ton tai trong danh sach.\n";
}
break;
case 5:
list.xoaDau();
break;
case 6:
cout << "Nhap gia tri phan tu y: ";
cin >> y;
list.xoaSau(y);
break;
case 7:
cout << "Cac phan tu chan: ";
list.xuatChan();
break;
case 8:
cout << "Danh sach: ";
list.xuatDanhSach();
break;
case 0:
cout << "Thoat chuong trinh.\n";
break;
default:
cout << "Lua chon khong hop le.\n";
break;
}
} while (choice != 0);
return 0;
}
Editor is loading...
Leave a Comment