linked list

Phần code sau thao tác với con trỏ, trong bài toán đọc dữ liệu từ 1 file trên ổ cứng, và in ra kết quả ra một file khác. Công việc tưởng chừng như vô bổ này lại rất nhiều vẫn đề !! Vấn đề thứ nhât: Đọc các thông tin trên file không phải là các số mà là các các kí tự kiệu “char”. Vấn đề thứ 2: dùng cấu trúc dữ liệu kiểu con trỏ để làm việc. Các file cs tên là “dataFile1.txt” và “dataFile2.txt” cần được tạo ra.

////////////////////////

#include<iostream>
#include”string.h”
#include<fstream>//thư viện này là cần thiết khi làm việc với các file dữ liệu

using namespace std;

//node là cấu trúc của một nút trong danh sách (link)

struct Node {
char HoTen[25];
char QueQuan[30];
int Diem;
Node *Next; //một trường chứa địa chỉ được đặt tên là ‘next’
};
class SinhVien {
Node *Ptr;
int Total;
public:
SinhVien(){Ptr=NULL; Total = 0;}
void NhapDS(char *nameFile1);
void InDS(char *nameFile2);
};
//chuong trinh chinh
void main() {
SinhVien QLSV;
cout<<“\nDang lay du lieu va tu fie”;
QLSV.NhapDS(“D:\\dataFile1.txt”);
cout<<“Dang ghi danh sach SV: “;
QLSV.InDS(“D:\\dataFile2.txt”);
cout<<“\nDone”;
}
//cai dat cac ham
void SinhVien::NhapDS(char *nameFile1) {
Node *P,*P1; //khai báo hai con trỏ lúc này nó chưa được cấp phát bộ nhớ đâu
int n = 0;
ifstream dataFile(nameFile1);// ofstream dùng để biết nameFile1 này là để đưa dữ liệu vào. “I” = “In”

//kien tra su dung dan cua file du lieu nhu sau
if(!dataFile.fail()){
——dataFile>>Total;
——dataFile.ignore();//sau khi doc ki tu Total thì trên bộ đệm của bàn phím để lại kí tự enter sẽ làm trôi các
—— do{ //kí tự được đọc vào sau đó dùng hàm ignore() để xoá kí tự enter này.
——P = new Node; //lấy bộ nhớ cho node P đã được khai báo từ lúc nãy.

——//đọc các thông tin từ fiele như sau:
—— dataFile.get(P->HoTen,25);
——dataFile.ignore();
——dataFile.get(P->QueQuan,30);
——dataFile.ignore();
——dataFile>>P->Diem;
——dataFile.ignore();
——P->Next =NULL; //gán trường địa chỉ của nút đầu tiên trong link này là NULL, nhớ không viết là ‘null’.
——if(Ptr ==NULL) //nếu chưa có node nào trong link thì để con trỏ chuyên trỏ đến đầu danh sách này trỏ vào
———Ptr = P; //node đó
——else { ngược lại tìm đến node cuối cùng để thêm P vào link
———P1 = Ptr;
———while(P1->Next!=NULL)
————P1 = P1->Next;
———P1->Next = P;
——}
——n++; //tăng n lên để kiểm tra xem đã cấp phát bộ nhớ bằng số học sinh được định trong file đầu vào chưa
——}while(n!=Total);
}
else{
——exit(1);
——cout<<“\nFile is fail.”;
}
dataFile.close();
}

//ghi ra file
void SinhVien::InDS(char *nameFile2) {
Node *P2;//kha báo con trỏ này để duyệt từ đầu link đến cuối link
P2 = Ptr; //gán con trỏ mới được khai này vào con trỏ luôn trỏ đến đầu link
ofstream dataFile(nameFile2); //ofstream dùng để biết nameFile2 này là để xuất dữ liệu “O” = “Out”
for(int i=1;i<=Total;i++){
——dataFile<<“\nSinh Vien thu “<<i;
——dataFile<<“\nHo Ten SV : “<<P2->HoTen;
——dataFile<<“\nQue Quan SV : “<<P2->QueQuan;
——dataFile<<“\nDiem: “<<P2->Diem;
——P2=P2->Next;
}
dataFile.close();
}

One thought on “linked list

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s