Professional Documents
Culture Documents
Tài liệu ôn tập cấu trúc dữ liệu giải thuật
Tài liệu ôn tập cấu trúc dữ liệu giải thuật
Lời giải:
#include <iostream>
#include <fstream>
#include <vector>
if (!inputFile.is_open()) {
cout << "Không thể mở tệp. Kiểm tra lại đường
dẫn." << endl;
return 1;
}
// Đóng tệp
inputFile.close();
return 0;
}
Câu 2đ6: Cài đặt cấu trúc dữ liệu ngăn xếp sử dụng cấu
trúc lưu trữ phân tán, ngăn xếp có phần tử dữ liệu là ký
tự. Sử dụng ngăn xếp đã cài đặt để chuyển một số
nguyên dương n nhập vào từ bàn phím sang số hex. Ghi
số nguyên dương n và số hex ra tệp văn bản 'thctdlgt-
thi-ketqua.txt
Lời giải:
#include <iostream>
#include <fstream>
#include <stack>
public:
Stack() : top(nullptr) {}
return data;
}
return top->data;
}
};
// Đóng tệp
outputFile.close();
}
int main() {
// Nhập số nguyên dương từ bàn phím
int n;
cout << "Nhap so nguyen duong n: ";
cin >> n;
Lời giải:
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
swap(items[i], items[maxIndex]);
}
}
int main() {
// Mở tệp văn bản để đọc danh sách mặt hàng
ifstream inputFile("mathang.txt");
if (!inputFile.is_open()) {
cout << "Không thể mở tệp. Kiểm tra lại đường
dẫn." << endl;
return 1;
}
// Hiển thị danh sách mặt hàng sau khi sắp xếp
cout << "\nDanh sach mat hang sau khi sap xep theo
so luong giam dan:" << endl;
for (const auto& it : itemList) {
cout << it.name << " " << it.quantity << " " << it.price
<< endl;
}
return 0;
}
Câu 2đ9: Cài đặt cấu trúc dữ liệu ngăn xếp lưu trữ
phân tán có phần tử dữ liệu là kiểu cấu trúc thí sinh. Mỗi
thí sinh có thông tin về số báo danh, họ tên, giới tính,
điểm thi. Sử dụng ngăn xếp đã cài đặt cho bài toán: Cho
tệp văn bản "thisinh.txt" chứa danh sách n thí sinh đã
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
được sắp xếp theo điểm thi tăng dần; đọc tệp và đưa ra
màn hình danh sách thí sinh nam theo thứ tự điểm thi
giảm dần
Lời giải:
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
public:
Stack(int size) : tableSize(size) {
table = new Node*[tableSize]();
}
int index = 0;
return data;
}
int main() {
// Mở tệp văn bản để đọc danh sách thí sinh
ifstream inputFile("thisinh.txt");
if (!inputFile.is_open()) {
cout << "Khong the mo tep. Kiem tra lai duong dan."
<< endl;
return 1;
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
}
// Đóng tệp
inputFile.close();
// Hiển thị danh sách thí sinh nam theo thứ tự điểm
giảm dần
Stack namStack(thisinhList.size());
cout << "Danh sach thi sinh nam theo thu tu diem
giam dan:" << endl;
for (const auto& ts : thisinhList) {
if (ts.gioiTinh == 'M') {
namStack.push(ts);
}
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
}
while (!namStack.isEmpty()) {
ThiSinh ts = namStack.pop();
cout << ts.soBaoDanh << " " << ts.hoTen << " " <<
ts.gioiTinh << " " << ts.diemThi << endl;
}
return 0;
}
Câu 1đ8: Cài đặt giải thuật sắp xếp sủi bọt (bubbleSort)
để sắp xếp một dãy số thực theo thứ tự giảm dần. Danh
sách số thực đọc vào mảng động từ tệp văn bản
"dayso.txt". Trong tệp dayso.txt : dòng đầu chứa số
nguyên n là phần tử có trong dãy số. Dòng thứ hai chứa
danh sách n số thực cách nhau bởi dấu cách. Đưa ra
màn hình danh sách dãy số ban đầu và sau khi sắp xếp.
Nếu n<=0 thì đưa ra màn hình dòng thông báo “Dãy số
trống không có phần tử nào".
Lời giải:
#include <iostream>
#include <fstream>
#include <vector>
int main() {
// Mở tệp văn bản để đọc dãy số
ifstream inputFile("dayso.txt");
if (!inputFile.is_open()) {
cout << "Khong the mo tep. Kiem tra lai duong dan."
<< endl;
return 1;
}
// Đóng tệp
inputFile.close();
Câu 2đ8: Cài đặt cấu trúc dữ liệu danh sách liên kết đơn
(DSLKD) có phần tử dữ liệu là kiểu cấu trúc mặt hàng.
Mỗi mặt hàng có thông tin về tên hàng, số lượng, đơn
giá. Sử dụng DSLKD đã cài đặt cho bài toán: Cho tệp văn
bản "mathang.txt" chứa danh sách n mặt hàng; Trong
tệp mathang.txt : dòng đầu chứa n là số mặt hàng. Các
dòng tiếp theo chứa thông tin của các mặt hàng, trong
đó mỗi mặt hàng chiếm 03 dòng và 03 dòng đó lần lượt
chứa: tên hàng, số lượng, đơn giá Đọc danh sách n mặt
hàng từ tệp lưu vào DSLKD; đưa danh sách mặt hàng
trong DSLKD ra màn hình; tìm và đưa ra mặt hàng trong
DSLKD mà có đơn giá cao nhất
Lời giải:
#include <iostream>
#include <fstream>
#include <string>
public:
LinkedList() : head(nullptr) {}
current = current->next;
}
}
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
// Hàm tìm mặt hàng có đơn giá cao nhất
MatHang* findMaxDonGia() {
if (head == nullptr) {
return nullptr;
}
return maxItem;
}
};
int main() {
// Mở tệp văn bản để đọc danh sách mặt hàng
ifstream inputFile("mathang.txt");
if (!inputFile.is_open()) {
cout << "Khong the mo tep. Kiem tra lai duong dan."
<< endl;
return 1;
}
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
// Đọc số lượng mặt hàng n
int n;
inputFile >> n;
// Tạo danh sách liên kết đơn và đọc danh sách mặt
hàng từ tệp
LinkedList matHangList;
for (int i = 0; i < n; ++i) {
MatHang* newItem = new MatHang;
inputFile.ignore(); // Đọc và bỏ qua ký tự xuống
dòng
getline(inputFile, newItem->tenHang);
inputFile >> newItem->soLuong >> newItem-
>donGia;
matHangList.addMatHang(newItem);
}
// Đóng tệp
inputFile.close();
return 0;
}
……………………………
#include<iostream>
#include<fstream>
#include<string.h>
SLInsert(head, x);
}
return 0;
}
current = current->next;
}
}
current = current->next;
}
return giaMHCN;
}MỤC LỤC
Bài 00(thctdlgtbai00.cpp): Tính diện tích và chu vi
hình tam giác
.......................................................................................
4
có 3 cạnh a,b,c đọc vào từ tệp văn bản 'tamgiac.txt'.
Đưa kết quả ra màn hình,
.......................................................................................
4
đồng thời ghi ra tệp văn bản 'kq-thctdlgtbai00.txt'......4
Bài 01(thctdlgtbai01.cpp): Đọc vào mảng động dãy số
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
nguyên có n phần tử từ tệp văn bản
'daysonguyen.txt'.Đưa các số lẻ về đầu dãy, các số
chẵn về cuối dãy. Viết 1 hàm đưa dãy số ra màn hình,
1 hàm hoán đổi nội dung 2 ô nhớ, 1 hàm đổi chỗ các
số chẵn, lẻ. Lưu dãy số sau khi thay đổi ra tệp văn bản
'kq- thctdlgtbai01.txt'
.......................................................................................
6
Bài 02(thctdlgtbai02.cpp): Tính n! theo giải thuật đệ
quy.................................................................................7
Bài 04(thctdlgtbai04.cpp): Cho ma trận số nguyên kích
thước mxn chứa trong tệp văn bản 'matran.txt'. Đọc
ma trận từ tệp vào mảng động. Đưa ma trận từ mảng
ra màn hình theo định dạng hàng, cột. Tính tổng và
trung bình cộng các phần tử của ma trận
.......................................................................................
7
Bài 05(thctdlgtbai05.cpp): Tính tổng 2 ma trận nguyên:
Cmxn
= Amxn + Bmxn. Ma trận Amxn để trong tệp văn bản
'matran- A.txt', ma trận Bmxn để trong tệp văn bản
'matran-B.txt'. Ma trận tổng Cmxn được ghi ra tệp văn
bản 'kq-thctdlgtbai05.txt'. Yêu cầu sử dụng mạng động
chứa các ma trận, viết hàm đọc vào ma trận từ tệp,
hàm đưa ra ma trận và hàm cộng 2 ma trận
.....................................................................................
11
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
Bài 06(thctdlgtbai06.cpp): Tính tích 2 ma trận nguyên:
Cmxn = Amxp * Bpxn. Ma trận Amxp để trong tệp văn
bản 'matran- A.txt', ma trận Bpxn để trong tệp văn
bản 'matran-B.txt'. Ma trận tích Cmxn được ghi ra tệp
văn bản 'kt-thctdlgtbai06.txt'.
Yêu cầu sử dụng mạng động chứa các ma trận, viết
hàm đọc vào ma trận từ tệp, hàm đưa ra ma trận và
hàm nhân 2 ma trận
.....................................................................................
14
Bài 07(thctdlgtbai07.cpp): Cài đặt cấu trúc dữ liệu ngăn
xếp sử dụng
.....................................................................................
16
cấu trúc lưu trữ kế tiếp với phần tử dữ liệu là ký tự.
Sử dụng ngăn xếp chuyển
.....................................................................................
16
1
một số nguyên dương hệ 10 sang hệ 2. Đưa ra bit
MSB của số nhị phân tìm được
.....................................................................................
16
Bài 08(thctdlgtbai08.cpp): Cài đặt cấu trúc dữ liệu ngăn
xếp sử dụng
.....................................................................................
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
18
cấu trúc lưu trữ kế tiếp với phần tử dữ liệu là ký tự.
Sử dụng ngăn xếp chuyển
.....................................................................................
18
một số nguyên dương hệ 10 sang hệ 16....................18
Bài 10(thctdlgtbai10.cpp): Cài đặt cấu trúc dữ liệu hàng
đợi sử dụng cấu trúc lưu trữ kế tiếp theo kiểu quay
vòng với phần tử dữ liệu là số nguyên. Sử dụng hàng
đợi cho bài toán: Đọc vào dãy số nguyên dương từ
tệp văn bản 'daysonguyen.txt', trên tệp không có
thông tin về số phần tử của dãy. Tách dãy
số thành dãy các số chẵn và dãy các số lẻ
20
Bài 11(thctdlgtbai11.cpp): Cài đặt cấu trúc dữ liệu hàng
đợi sử dụng
.....................................................................................
22
cấu trúc lưu trữ kế tiếp theo kiểu quay vòng. Sử dụng
hàng đợi cho bài toán
.....................................................................................
22
Có một tệp danh sách sinh viên, mỗi sinh viên có thông
tin gồm mã sv, họ tên, giới tính, điểm tbc
.....................................................................................
22
Danh sách sinh viên trên tệp đã được sắp xếp theo
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
điểm tbc giảm dần
.....................................................................................
22
Ghi lại tệp sao cho tất cả sinh viên nữ ở đầu danh sách,
tất cả sinh viên nam ở cuối danh sách,
.....................................................................................
22
điểm tbc vẫn giảm dần trong nhóm nam và nữ.........22
Bài 12(thctdlgtbai12.cpp): Cài đặt danh sách liên kết
đơn có phần tử dữ liệu là số nguyên, với cácbphép
toán sau
.....................................................................................
25
1) Bổ sung phần tử dữ liệu x vào sau nút M...............25
2) Bổ sung phần tử dữ liệu x vào trước nút M...........25
3) Xóa nút M................................................................25
4) Duyệt danh sách để đưa các phần tử dữ liệu ra màn
hình...........................................................................25
5)Tìm một nút có phần tử dữ liệu bằng x, nếu có trả về
địa chỉ nút, nếu không có trả về rỗng
25
Sử dụng danh sách liên kết đơn P để lưu trữ dãy số
nguyên theo thứ tự đọc vào
.....................................................................................
25
4
x, nếu tìm thấy thì trả về vị trí của khóa, nếu không tìm
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
thấy thì trả về 0
.....................................................................................
54
Bài 31(thctdlgtbai31.cpp). Cho dãy khóa n phần tử là
các số nguyên lưu trữ trong tệp văn bản
'daykhoatangdan.txt'. Đọc dãy khóa từ tệp vào mảng
động. Cài đặt giải thuật tìm kiếm nhị phân dạng không
đệ quy để tìm khóa có giá trị bằng x, nếu tìm thấy thì
trả về vị trí của khóa, nếu không tìm thấy thì trả về
0.
.....................................................................................55
Bài 33(thctdlgtbai33.cpp). Cho dãy khóa n phần tử là
các số nguyên lưu trữ trong tệp văn bản 'daykhoa.txt'.
Đọc dãy khóa từ tệp để tạo cây nhị phân tìm kiếm. Tìm
khóa có giá trị bằng x, nếu không tìm thấy thì bổ sung
x vào dãy khóa
.....................................................................................
58
Làm c 愃 Āc bài
Bài 00(thctdlgtbai00.cpp): Tính diện tích và chu vi
hình tam gi 愃 Āc
có 3 cạnh a,b,c đọc vào từ tệp văn bản 'tamgiac.txt'.
Đưa kết quả ra màn hình,
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
đồng thời ghi ra tệp văn bản 'kq-thctdlgtbai00.txt'.
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<math.h>
//====Chuong trinh
chinh===== int main()
{
//Khai bao tep
ifstream fin("tamgiac.txt");
ofstream fout("kq-thctdlgtbai00.txt");
//Khai bao
bien float
a,b,c;
cout<<endl;
return 0;
}
//====Dinh nghia ham===
#include<iostream>
#include<stdio.h>
#include<fstream>
using namespace
std;
//===chuong trinh
chinh=== int main()
{
float r,dt,cv;
ofstream fout("kq-
thctgdlgtbai00.txt"); ifstream
fin("hinhtron.txt");
fin>>r;
fin.close();
if(r>0)
{
cv=2*r*3.1
4;
dt=r*r*3.1
4;
//luu file
fout<<"Hinh tron co ban kinh la: r="<<r<<'\n';
fout<<"Hinh tron co chu vi: "<<cv<<" va dien
tich
la:"<<dt<<'\n';
fout.close();
}
else
{
cout<<"Hinh tron co ban kinh khong hop
le"; fout<<"Hinh tron co ban kinh khong
hop le";
fout.close();
cout<<endl;
return 0;
}
}
7
using namespace
std; int
GiaiThua(int n);
//===chuong trinh
chinh=== int main()
{
int n;
cout<<"Chuong trinh tinh n!\nNhap so
nguyen n:"; cin>>n;
//Khai bao ham cai dat cac phep toan tren mang 2
chieu
//===chuong trinh
chinh=== int main()
{
//Khai bao tep vao
ifstream
fin("matran.txt");
//Khai bao
bien int m,n;
cout<<endl;
return 0;
}
//===dinh nghia
ham=== void duaRa(int
*V,int m,int n)
{
for(int i=1;i<=m;i++)
{
//Dua ra hang i
for(int
j=1;j<=n;j++)
{
//Xuong
dong
cout<<endl;
}
10
//Cong vao
tong tong +=
V[k];
}
//Tra ve tong
//Cong vao
tong tong +=
V[k];
}
//Tra ve TBC
return
tong/(m*n);
}
int main()
{
int *A,*B,*C;
int mA,nA,mB,nB;
12
ofstream fout("kq-
thctdlgtbai05.txt");
fout<<mA<<'\t'<<nA<<endl;
for(int i=1;i<=mA;i++)
{
for(int j=1;j<=nA;j++)
13
fin>>m>>n;
V=new
int[m*n];
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
fin>>V[(i-1)*n+j-1];
}
14
#include<iostream>
#include<stdio.h>
#include<fstream>
int main()
{
int *A,*B,*C;
int mA,nA,mB,nB;
if(nA==mB)
{
C=tichMT(A,B,mA,nA,nB);
cout<<"Ma tran tich C la:\
n"; duaRaMT(C,mA,nB);
15
}
void docVaoMT(int* &V,int &m,int &n,const char
*tenTep)
{
ifstream fin(tenTep);
fin>>m>>n;
V=new
int[m*n];
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
fin>>V[(i-1)*n+j-1];
return V3;
}
void duaRaMT(int *V,int m,int n)
16
//===chuong trinh
chinh=== int main()
{
//Cai dat cau truc luu tru ke tiep cua
ngan xep char S[N];
int T=-1;
//Khai bao
bien int
n,thuong,du
; char msb;
//Nhap n
cout<<"Nhap vao mot so nguyen duong: ";
17
//Chuyen sang
he 2 thuong=n;
while(thuong)
{
du = thuong%2;
thuong /= 2;
cout<<endl;
return 0;
}
//===dinh nghia ham===
void push(char *S,int &T,char x)
{
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
//1.Kiem tra
day if(T==N-
1)
{
cout<<"Ngan xep da
day."; return;
}
//Tra ve phan tu
dinh return S[T];
}
#include<iostream>
#include<stdio.h>
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
using namespace std;
19
//===chuong trinh
chinh=== int main()
{
//Cai dat cau truc luu tru ke tiep cua
ngan xep Stack ST={-1};
//Khai bao
bien int
n,thuong,du
;
//Nhap n
cout<<"Nhap vao so nguyen
duong: "; cin>>n;
//Chuyen sang
he 16 thuong=n;
while(thuong)
{
du=thuong%16;
thuong /=16;
if(du<10)
} push(ST,du+48); else
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
p ush(ST,du+55);
cout<<endl;
return 0;
}
//===dinh nghia
ham=== void
push(Stack &ST, char x)
{
//1.Kiem tra
day if(ST.T ==
N-1)
{
cout<<"Ngan xep
day."; return;
}
20
#include<iostream
>
#include<stdio.h>
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
#include<fstream>
using namespace
std;
//Khai bao hang
#define N 50
//Khai bao kieu cau truc gop
3 bien struct Queue
{
int F, R;
int
Q[N];
};
//Khai bao ham cai dat cac phep toan tren
hang doi void CQInsert(Queue &QFR,int
a);
int CQDelete(Queue
&QFR); bool
CQIsEmpty(Queue QFR);
21
int main ()
{
//Cai dat cau truc
luw tru Queue QFR
= {-1,-1};
//Khai bao tep vao ra
ifstream
fin("daysonguyen.txt");
ofstream
fout("daysonguyen2.txt");
//Khai bao
bien int a;
QFR.Q[QFR.R] = a;
}
int CQDelete (Queue &QFR)
{
int tg;
if (QFR.F == -1)
{
cout<<"Hang doi rong!";
return tg;
}
tg =
QFR.Q[QFR.F];
if (QFR.F ==
QFR.R)
QFR.F = QFR.R = -1;
else if (QFR.F == N - 1)
QFR.F=0;
else
QFR.F++;
return tg;
}
bool CQIsEmpty(Queue QFR)
{
return QFR.F == -1;
}
23
//Khai bao
hang #define
N 50
//Khai bao
bien int n;
SinhVien x;
//Doc so luong sv
tu tep fin>>n;
fout<<n<<endl;
24
if(strcasecmp(x.gioiTinh,"Nữ")==0)
{
fout<<x.maSV<<'\t'<<x.hoTen<<'\t'<<x.gioiTinh<<'\
t'<<x.diemT BC<<endl;
}
else
CQInsert(QFR, x);
fout<<x.maSV<<'\t'<<x.hoTen<<'\t'<<x.gioiTinh<<'\
t'<<x.diemT BC<<endl;
cout<<"\n Test xoa: "<<x.maSV<<'\
t'<<x.hoTen<<'\t'<<x.gioiTinh<<'\t'<<x.diemTBC;
}
cout<<"\nDa ghi lai danh sach sinh vien ra tep
sinhvien2.txt";
cout<<endl;
return 0;
}
//===dinh nghia ham===
void CQInsert(Queue &QFR, SinhVien x)
{
25
QFR.Q[QFR.R] = x;
cout<<"\nTest chen: "<<x.maSV;
}
if (QFR.F == -1)
{
cout<<"Hang doi
rong!"; return tg;
}
tg = QFR.Q[QFR.F];
if (QFR.F == QFR.R)
QFR.F = QFR.R =
-1;
else if (QFR.F == N - 1)
QFR.F=0;
else
QFR.F++;
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
cout<<"\nTest xoa:
"<<tg.maSV; return tg;
}
26
#include<iostream>
#include<fstream>
#include<stdio.h>
27
//===chuong trinh
chinh=== int main()
{
//Cai dat cau truc luu tru cua
DSLKD P va Q node
*P=NULL,*Q=NULL,*M;
//Khai bao tep doc vao
ifstream fin("daysonguyen.txt");
//Khai bao
bien int x;
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
//Doc day so tu tep dua vao
DSLKD P while(fin>>x) M =
SLPostInsert(P,M,x);
if(M=SLSearch(P,x))
{
//Xoa phan tu bang x trong
DSLKD P SLDelete(P,M);
//Dua ra DSLKD P
cout<<"\nDay so trong DSLKD P sau khi xoa phan tu
"<<x<<" la:\n";
SLDisplay(P);
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
}
else cout<<"\nTrong DSLKD P khong co phan tu bang
"<<x;
cout<<endl;
return 0;
}
//===dinh nghia ham===
node* SLPostInsert(node* &F,node *M,int x)
29
31
32
#include<iostream>
#include<stdio.h>
#include<fstream>
using namespace
std;
//Khai bao sinh
vien struct SV
{
char
maSV[10];
char
hoTen[100];
char lop[10];
float
diemTBC;
};
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
//Khai bao kieu cau truc nut nho
cua DSLKD struct node
{
SV infor;
node
*link;
};
//===chuong trinh
chinh=== int main()
{
//Cai dat cau truc luu tru
cua DSLKD node
*P=NULL,*Q=NULL,*M;
33
//Khai bao
bien int n;
SV x;
char tg[3];
char
maSV[10];
char
hoTen[100];
char lop[10];
float
diemTBC;
//Doc so luong mat hang tu
tep fin>>n;
//Doc cac mat hang tu tep dua
vao DSLKK for(int i=0;i<n;i++)
{
}
duoi
Doc fin.getline(tg,sizeof(tg));
}
else // M khong phai nut dau tien
{
// Tim nut truoc nut
M node *P= F;
while(P->link != M)
{
P= P->link;
}
//Noi N vao danh
sach N->link = P-
>link;
P->link = N;
36
37
//===Chuong trinh
chinh=== int main()
{
//Cai dat cau truc luu tru
cua DSLKK DList
LR={NULL,NULL};
//Khai bao
bien int x;
//Dua ra day so
cout<<"Day so trong DSLKK tu trai qua phai
la:\n"; DLDisplay(LR);
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
cout<<"\n\nDay so trong DSLKK tu phai qua trai
la:\n"; DLDisplay(LR,0);
cout<<end
l; return 0;
}
//===Dinh nghia ham===
node* DLPostInsert(DList &LR,node *M,int x)
{
//Tao nut moi chua
phan tu x node *N
= new node;
N->infor = x;
N->left = N->right = NULL;
38
39
//Huy nut
M delete
M;
}
while(P)
{
cout<<P->infor<<" ";
P = leftToRight?P->right:P->left;
}
}
40
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<string.h>
//Khai bao cau truc nut nho cua danh sach lien ket
kep (DSLKK) struct node
{
MatHang
infor; node
*left,*right;
};
//Khai bao ham cai dat cac phep toan tren DSLKK
41
//===chuong trinh
chinh=== int main()
{
//Cai dat cau truc luu tru cua
DSLKK node
*L=NULL,*R=NULL;
//Khai bao
bien int n;
MatHang
x; char
tg[3];
char maHang[11];
42
cout<<endl;
return 0;
}
//===dinh nghia ham===
void DLLastInsert(node* &L,node* &R,MatHang x)
{
//1.Tao nut nho moi
chua x node *N =
new node;
N->infor = x;
N->left = N->right = NULL;
//Huy nut
M delete M;
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
//Da
xoa
return
1;
}
44
//===chuong trinh
chinh=== int main()
{
//Cai dat cau truc luu tru phan tan
cua ngan xep node *T=NULL;
//Khai bao
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
bien int n;
//Nhap n
cout<<"Nhap vao so nguyen
duong n: "; cin>>n;
cout<<end
l; return 0;
}
45
//Giu lai
nut dinh int
tg = T-
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
>infor;
node *P =
T;
bool isEmpty(node* T)
{
return T==NULL;
}
bool isPrime(int x)
{
46
//x la
nguyen to
return 1;
}
//Khai bao ham cai dat cac phep toan tren hang doi
47
//===chuong trinh
chinh=== int main()
{
//Cai dat cau truc luu tru phan tan
cua hang doi Queue
Q={NULL,NULL};
//Khai bao
bien term
t;
//Tinh P(x)
float
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
x,Px=0;
cout<<"\n\nNhập vào x: ";cin>>x;
while(!QIsEmpty(Q))
{
t = QDelete(Q);
Px += t.coeff*pow(x,t.power);
}
printf("P(x) = %0.1f",Px);
cout<<end
l; return 0;
}
//===dinh nghia ham===
void QInsert(Queue &Q, term x)
{
48
//1.Kiem tra
rong
if(Q.F==NULL)
{
cout<<"Hang doi da
rong!"; return tg;
}
//2.Giu lai
nut F
tg=Q.F-
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
>infor;
node
*P=Q.F;
//4.Huy va tra
ve nut delete
P;
return tg;
}
bool QIsEmpty(Queue Q)
{
return Q.F==NULL;
}
49
#include<iostream>
#include<fstream>
#include<stdio.h>
//===chuong trinh
chinh=== int main()
{
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
//Khai bao tep doc vao
ifstream
fin("daykhoa.txt");
//Khai bao
bien int n;
//Dua ra
cout<<"\n\nDay khoa da sap xep tang dan
la:\n"; for(int i=0;i<n;i++) cout<<a[i]<<" ";
cout<<endl;
return 0;
}
//===dinh nghia
ham=== void
selectionSort(int *a,int
n)
{
for(int i=0;i<n-1;i++)
{
//Tim vi tri k cua khoa
nho nhat int k=i;
for(int j=i+1;j<n;j++)
if(a[j]<a[k]) k=j;
//Doi cho khoa nho nhat o vi tri k ve
vi tri i if(k!=i)
{
int
tg=a[i];
a[i]=a[k];
a[k]=tg;
}
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
}
}
#include<iostream>
#include<fstream>
#include<stdio.h>
51
//===chuong trinh
chinh=== int main()
{
//Khai bao tep doc vao
ifstream
fin("daykhoa.txt");
//Khai bao
bien int n;
//Dua ra
cout<<"\n\nDay khoa da sap xep tang dan
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
la:\n"; for(int i=0;i<n;i++) cout<<a[i]<<" ";
cout<<endl;
return 0;
}
//===dinh nghia
ham=== void
insertSort(int *a,int
n)
{
for(int i=1;i<n;i++)
{
int tg=a[i],j=i-1;
#include<iostream>
#include<fstream>
#include<stdio.h>
//===chuong trinh
chinh=== int main()
{
//Khai bao tep doc
vao ifstream
fin("daykhoa.txt");
//Khai bao
bien int n;
//Dua ra
cout<<"\n\nDay khoa da sap xep tang dan
la:\n"; for(int i=0;i<n;i++) cout<<a[i]<<" ";
cout<<endl;
return 0;
}
//===dinh nghia
ham=== void
bubbleSort(int *a,int n)
{
for(int i=0;i<n-
1;i++) for(int
j=n-1;j>i;j--)
{
if(a[j]<a[j-1])
{
int tg =a[j-
1]; a[j-
1]=a[j];
a[j]=tg;
}
}
}
#include<iostream>
#include<fstream>
#include<stdio.h>
//Khai bao
bien int n,
*a;
//Dua ra
cout<<"\n\nDay khoa da sap xep tang dan
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
la:\n"; for(int i=0;i<n;i++) cout<<a[i]<<" ";
cout<<endl;
return 0;
}
//===dinh nghia ham===
void quickSort(int *&a,int L,int R)
{
if(L>=R) return;
//Duyet ben phai sang trai cho toi khi gap phan tu
<= x while(a[j]>x) j--;
55
#include<iostream>
#include<fstream>
#include<stdio.h>
//===chuong trinh
chinh=== int main()
{
//Khai bao tep doc vao
ifstream
fin("daykhoa.txt");
//Khai bao
bien int n,x;
//Doc vao so phan tu cua day khoa
tu tep fin>>n;
56
//Tim x
cout<<"\n\nNhap khoa x can tim:
"; cin>>x;
int kq = sequenceSearch(a,n,x);
cout<<endl;
return 0;
}
//===dinh nghia ham===
int sequenceSearch(int *k,int n,int x)
{
//1.Khoi
tao int
i=0;
57
//Khai bao ham cai dat giai thuat tim kiem nhi
phan tren mang int binarySearch(int *k,int n,int
x);
//===chuong trinh
chinh=== int main()
{
//Khai bao tep doc vao
ifstream fin("daykhoatangdan.txt");
//Tim x
cout<<"\n\nNhap khoa x can tim:
"; cin>>x;
int kq = binarySearch(a,n,x);
cout<<endl;
return 0;
}
//2.Tim kiem
while(L<=R)
{
59
//So sanh
if(x<k[m]) R =
m-1;
else if(x>k[m]) L =
m+1; else return
m+1;
}
//3.Khong tim
thay return 0;
}
#include<iostream>
#include<fstream>
#include<stdio.h>
//Khai bao ham cai dat giai thuat tim kiem nhi
phan tren cay node* BST(node* &T,int x);
60
cout<<endl;
return 0;
}
//===dinh nghia
ham=== node*
BST(node* &T,int x)
{
//1.Khoi tao con
tro node
*p=NULL,*q=T;
if(T==NULL) T = q;
else if(x<p->key) p->left =
q; else p->right = q;
61
//===chuong trinh
chinh=== int main()
{
//Cai dat cau truc luu tru ke tiep cua
ngan xep Stack ST={-1};
62
//Bai 18(thctdlgtbai18.cpp):
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<string.h>
//Khai bao ham cai dat cac phep toan tren hang doi
void QInsert(Queue &Q, SinhVien x);
SinhVien QDelete(Queue &Q);
bool QIsEmpty(Queue Q);
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
//Chuong trinh chinh
int main()
{
//Cai dat cau truc luu tru phan tan cua hang doi
Queue Q={NULL,NULL};
//Doc tung sv tu tep, neu la sv nu thi dua ra man hinh, neu la sv nam
thi dua vao hang doi
for (int i=0;i<n;i++)
{
//Doc Enter tren tep
fin.getline(x.maSV, sizeof(x.maSV));
//Neu la nu thi ghi ra tep, con lai dua vao hang doi
if(strcasecmp(x.gioiTinh, "Nu") == 0)
cout<<x.maSV<<'\t'<<x.hoTen<<'\t'<<x.gioiTinh<<'\
t'<<x.diemTBC<<endl;
else
QInsert(Q,x);
}
//Lay danh sach sv nam tu hang doi dua ra man hinh
cout<<"\nDanh sach cac sinh vien nam la:\n";
tg=Q.F->infor;
while(!QIsEmpty(Q))
{
x = QDelete(Q);
cout<<x.maSV<<'\t'<<x.hoTen<<'\t'<<x.gioiTinh<<'\
t'<<x.diemTBC<<endl;
}
//Dua thong tin sv nam co diem TBC cao nhat ra man hinh
cout<<"\nSinh vien nam co diem TBC cao nhat la:\n";
cout<<tg.maSV<<'\t'<<tg.hoTen<<'\t'<<tg.gioiTinh<<'\t'<<tg.diemTBC;
cout<<endl;
return 0;
Downloaded by Nghi?p ?oàn V?n (nghiepdv.k43@c3nguyendu.edu.vn)
}
//==Dinh nghia ham==
void QInsert(Queue &Q, SinhVien x)
{
//1.tao nut moi
node *N=new node;
N->infor=x;
N->link=NULL;
0.