{
node *p, *end; p=new node; p->info=x;
p->link=NULL; if(home==NULL) home=p; else
{
end=home;
while(end->link!=NULL) end=end->link; end->link=p;
}
}
void add(int x, unsigned int k)
Có thể bạn quan tâm!
- Các Tham Số Kiểu Cđa Khuôn Hình Hàm
- Các Tham Số Biểu Thức Trong Khuôn Hình Lớp
- Sự Giống Nhau Cđa Các Lớp Thể Hiện
- Lập trình hướng đối tượng - 23
- Lập trình hướng đối tượng - 24
- Đọc Ghi Dữ Liệu Đồng Thời Trên Tệp Lớp Fstream
Xem toàn bộ 256 trang tài liệu này.
{
node *p, *q; unsigned int dem=0;
if((k<1)||(k>count()+1))
{
cout<<"Vi tri bo sung khong hop le"; return;
}
else
{
p=new node; p->info=x;
p->link=NULL; if(k==1)
{
}
else
p->link=home; home=p;
{
q=home;dem=1; while(dem<k-1)
{
q=q->link; dem++;
}
p->link=q->link; q->link=p;
}
}
}
void remove(node *p)
{
node *q; if(home==NULL) return; else
{
if(p==home)
if(home->link==NULL) home=NULL; else
{
home=home->link; p->link=NULL;
}
else
{
q=home;
while(q->link!=p) q=q->link; q->link=p->link;
}
delete p;
}
}
void remove(int x)
{
node *p,*q; p=home; while(p!=NULL)
{
q=p;
while((q!=NULL)&&(q->info!=x)) q=q->link; if(q!=NULL)
{
p=q->link; remove(q);
}
else p=NULL;
}
}
void remove(unsigned int k)
{
node *p, *q; unsigned int dem=0; if((k<1)||(k>count()))
{
cout<<"Vi tri loai bo khong hop le"; return;
}
else
{
q=home;dem=1; while(dem<k)
{
q=q->link; dem++;
}
remove(q);
}
}
};
void main()
{
list l; int x;
unsigned int k; clrscr();
l.create();
cout<<"danh sach vua nhap:"; l.display();
cout<<"n";
cout<<"Nhap so can bo sung:";cin>>x;
// cout<<"Nhap vitri can bo sung:";cin>>k; l.add(x);
cout<<"danh sach sau khi bo sung:"; l.display();
cout<<"n";
cout<<"Nhap vitri can loai bo:";cin>>x; l.remove(x);
cout<<"danh sach sau khi loai bo:"; l.display();
getch();
}
Câu hỏi và bài tập
1. Cho một dãy gồm n khoá K1, K2, .., Kn với Ki ≠ Kj nếu i ≠ j. viết chương trình xây dựng khuôn hình lớp để cài đặt các giải thuật sắp xềp: Lựa chọn, thêm dần, nổi bọt, phân đoạn, vun đống và cài đặt các giải thuật tìm kiếm: tuần tự, nhị phân và cây nhị phân tìm kiếm.
2. viết chương trình xây dựng khuôn hình lớp tập hợp với tập hợp với các phương thức: Nhập các phần tử cđa một tập hợp từ bàn phím, hiển thị các phần tử cđa tập hợp ra màn hình, kiểm tra một phần tử có thuộc tập hợp không?; các phương thức toán tử dùng để: Tính hợp cđa hai tập hợp, tính giao cđa hai tập hợp, tính hiệu hai tập hợp. Nhập vào từ bàn phím các phần tử cđa hai tập hợp, tính hợp, giao, hiệu hai tập hợp trên và hiển thị ra màn hình các phần tử cđa tập hợp kết quả tìm được.
3. viết chương trình xây dựng khuôn hình lớp danh sách nối kép với hàm tạo, hàm huỷ và các phương thức dùng để: Tạo lập danh sách, hiển thị danh sách, bổ sung phần tử, loại bỏ phần tử, sắp xềp các phần tử, tìm kiếm phần tử. Nhập vào một danh sách bệnh nhân, sử dụng danh sách nối kép lưu trữ danh sách bệnh nhân và sắp xềp thứ tự khám bệnh theo nguyên tắc ai đến trước thì được khám trước.
4. viết chương trình xây dựng khuôn hình lớp cây nhị phân tìm kiếm với hàm tạo, hàm huỷ và các phương thức dùng để: Tạo cây, hiển thị thông tin được lưu trữ tại các nút trên cây, bổ sung nút mới, loại bỏ nút, ... Nhập vào một danh sách từ tiềng Anh và một nghĩa tiềng Việt tương ứng, hãy tạo cây nhị phân tìm kiếm dựa trên dãy từ tiềng Anh vũa nhập và thực hiện các thao tác tìm kiếm, bổ sung, loại bỏ trên cây nhị phân trên.
Chương 5: Các dòng xuất nhập
Nội dung cđa chương tập trung trình bày các vấn đề sau:
Các lớp dòng tin (stream)
Dòng cin và toán tử nhập
Dòng cout và toán tử xuất
Các phương thức, cờ định dạng
Các thao tác với tệp tin
5.1. Các lớp stream
C++ sử dụng khái niệm dòng tin (stream) và đưa ra các lớp dòng tin để tổ chức việc xuất nhập dữ liệu. Dòng tin có thể xem như một dẫy các byte. Thao tác nhập là lấy (đọc) các byte từ dòng tin (khi đó gọi là dòng nhập - input) vào bộ nhớ. Thao tác xuất là đưa các byte từ bộ nhớ ra dòng tin (khi đó gọi là dòng xuất - output). Các thao tác này là độc lập thiết bị. Để thực hiện việc nhập, xuất lên một thiết bị cụ thể, chúng ta chỉ cần gắn dòng tin với thiết bị này.
Có 4 lớp quan trọng được khai báo trong thư viện iostream.h là:
+ Lớp cơ sở: ios
+ Hai lớp: istream và ostream được dẫn xuất từ lớp ios
+ Lớp: iostream được dẫn xuất từ lớp istream và ostream.
istream
Sơ đồ dẫn xuất giữa các lớp như sau:
ios
ostream
iostream
Sơ đồ 5.1
5.2. Dòng cin và toán tử nhập
Dòng cin là một đối tượng kiểu istream, là dòng vào chuẩn gắn với bàn phím.
Các thao tác nhập trên dòng cin đồng nghĩa với nhập dữ liệu từ bàn phím.
cin và toán tử nhập (>>)
Cách dùng toán tử nhập để đọc dữ liệu từ dòng cin như sau: cin>>tham_số_1>>tham_số_2>>...>>tham_số_n;
Trong đó: các tham số có thể là biến; phần tử mảng nguyên, thực; ký tự; con trỏ ký tự
Cú pháp trên dùng để nhập dữ liệu dạng số, ký tự, xâu ký tự không chứa khoảng trắng(dấu cách). Cách thức nhập như sau: Bỏ qua các ký tự trắng (dấu cách, dấu tab, dấu chuyển dòng) đứng trước nếu có và sau đó đọc vào các ký tự tương ứng với kiểu yêu cầu (được chỉ ra bởi kiểu cđa biến). Việc nhập kết thúc khi gặp ký tự trắng hoặc ký tự không đúng định dạng cđa dữ liệu cần nhập.
cin và các phương thức nhập ký tự, chuỗi ký tự
Toán tử nhập (>>) chỉ tiện lợi khi nhập dữ liệu dạng số, để nhập dữ liệu kiểu ký tự hoặc xâu ký tự ta có thể sử dụng một số phương thức sau:
Cú pháp:
int cin.get();
Chức năng: Nhập một ký tự (bao gồm cả khoảng trắng)
Cú pháp:
istream cin.get(char &ch);
Chức năng: Nhập một ký tự và đặt vào biến kiểu char được tham chiều bởi ch
Cú pháp:
cin.get(char *str, int n, char delim = 'n');
Chức năng: Nhập một dãy ký tự (kể cả dấu cách và đưa vào biến do str trỏ tới. Quá trình đọc kết thúc khi gặp ký tự giới hạn ('n') hoặc đã nhận đđ n-1 ký tự
Cú pháp:
cin.getline(char *str, int n, char delim = 'n');
Chức năng: Nhập một dãy ký tự (kể cả dấu cách và đưa vào biến do str trỏ tới. Quá trình đọc kết thúc khi gặp ký tự giới hạn ('n') hoặc đã nhận đđ n-1 ký tự, sau
đó loại mã cđa phím Enter ra khỏi dòng nhập.
Cú pháp:
cin.ignore(n);
Chức năng: Loại bỏ n ký tự trên dòng nhập. Thường dùng để loại bỏ các ký tự không cần thiết trên dòng nhập trước khi thực hiện việc nhập dữ liệu đặc biệt là khi nhập dữ liệu dạng ký tự hoặc xâu ký tự.
Có thể định nghĩa chồng toán tử nhập (>>) trên dữ liệu kiểu đối tượng cđa lớp.
Để thực hiện việc này ta phải xây dựng hàm toán tử nhập là hàm bạn cđa lớp đó. Giả sử ta khai báo một lớp ts- thí sinh, gồm 3 thuộc tính: sbd- số báo danh, ten- họ và tên, diem- tổng điểm thi cđa thí sinh khi đó ta có thể định nghĩa chồng toán tử nhập để nhập thông tin về một thí sinh như sau:
Ví dụ 5.1:
class ts
{
char sbd[5]; char ten[30];
unsigned int diem; public:
friend istream &operator>>(istream &is, ts &t)
{
cout<<"So bao danh:"; is.getline(t.sbd,5); cout<<"Ho va ten:"; is.getline(t.ten,30); cout<<"Tong diem:"; is>>t.diem; is.ignore();
return is;
}
...........
};
5.3. Dòng cout và toán tử xuất
Dòng cout là một đối tượng kiểu ostream, đó là dòng xuất chuẩn gắn với màn hình. Cách dùng toán tử xuất để xuất dữ liệu từ bộ nhớ ra dòng cout như sau: