Em có học CTDL và GT thì thấy em cho đề như sau:
Em đang tập học về danh sách liên kết đơn nhưng thấy khá khó học vì nó dùng cón trỏ khá nhiều. Sau khi xem trên mạng và code theo thì em có tạo được cái dslk đơn nhưng đến cái câu 3 kia thì em chưa rõ cách code như nào. Có phải là mình sẽ duyệt từ đầu đến cuối cái danh sách rồi so sánh cái data trong Node với k. Nếu bằng thì tăng biến đếm lên rồi cout ra đúng k ạ. Nhưng em code chả ra. Mọi người xem giúp em với ạ gần đến hạn nộp rồi mà chưa biết làm =((.
#include <iostream>
using namespace std;
struct node {
int data;
struct node * pNext;
};
typedef struct node NODE;
struct list {
NODE * pHead;
NODE * pTail;
};
typedef struct list LIST;
void KhoiTao(LIST & l) {
l.pHead = NULL;
l.pTail = NULL;
}
NODE * KhoiTaoNODE(int x) {
NODE * p = new NODE;
if (p == NULL) {
cout << "Khong du bo nho de cap phat!" << endl;
return NULL;
}
p - > data = x;
p - > pNext = NULL;
return p;
}
void ThemVaoDau(LIST & l, NODE * p) {
if (l.pHead == NULL) {
l.pHead = l.pTail = p;
} else {
p - > pNext = l.pHead;
l.pHead = p;
}
}
void ThemVaoCuoi(LIST & l, NODE * p) {
if (l.pTail == NULL) {
l.pHead = l.pTail = p;
} else {
l.pTail - > pNext = p;
l.pTail = p;
}
}
void XuatDanhSach(LIST l) {
for (NODE * k = l.pHead; k != NULL; k = k - > pNext) {
cout << "\t" << k - > data << " ";
}
}
int DemSoK(LIST & l) {
int dem = 0;
int k;
cout << "Nhap k:";
cin >> k;
for (NODE * p = l.pHead; p != NULL; p = p - > pNext) {
if (k == p - > data) {
dem++;
}
}
return dem;
}
void Menu(LIST & l) {
int choice;
do {
system("cls");
cout << "1.Tao danh sach so " << endl;
cout << "2.Xuat danh sach so" << endl;
cout << "3.Them mot phan tu vao dau danh sach" << endl;
cout << "4.Them mot phan tu vao cuoi danh sach" << endl;
cout << "5.Nhap vao mot so k va dem xem trong day co bao nhieu so co gia tri = k" << endl;
cout << "6.Kiem tra trong day co 3 so chan dung canh nhau hay khong (neu co thi in ra)" << endl;
cout << "7.Sap xep danh sach theo thu tu tang dan" << endl;
cout << "8.Xoa tat ca cac so nguyen to trong danh sach" << endl;
cout << "9.Xoa tat ca cac so co gia tri trung nhau trong danh sach, chi giu lai 1 so" << endl;
cout << "Ban chon: ";
cin >> choice;
switch (choice) {
case 1:
{
int x;
cout << "Nhap so:";
cin >> x;
NODE * p = KhoiTaoNODE(x);
ThemVaoCuoi(l, p);
}
break;
case 2:
{
cout << "\tXuat danh sach lien ket" << endl;
XuatDanhSach(l);
cout << endl;
system("pause");
}
break;
case 5:
{
int d = DemSoK(l);
cout << "Co " << d << "so co gia tri bang k";
}
break;
}
} while (choice != 9);
}
int main() {
LIST l;
KhoiTao(l);
Menu(l);
return 0;
}