1. Trang chủ
  2. » Luận Văn - Báo Cáo

đề tài số 12 tên đề tài ứng dụng danh sách liên kết vòng đơn vào quản lý nhân sự

31 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG ÁKHOA: CÔNG NGHỆ THÔNG TIN

Nguyễn Quốc Đại DCCNTT13.10.20 13

Bắc Ninh, năm 2023BỘ GIÁO DỤC VÀ ĐÀO TẠO

Trang 2

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG ÁKHOA: CÔNG NGHỆ THÔNG TIN

Điểm bằngchữ1Hoàng Trọng Giáp 20223729

CÁN BỘ CHẤM 1

(Ký và ghi rõ họ tên)

CÁN BỘ CHẤM 2

(Ký và ghi rõ họ tên)

Trang 3

MỤC LỤC

Bảng phân công công việc 6

I LỜI NÓI ĐẦU 7

II LÝ THUYẾT 8

Chương 1 : Một số khái niệm cơ bản về cấu trúc dữ liệu và giải thuật 8

1.1 Giải thuật 8

1.2 Quan hệ giữa giải thuật và cấu trúc dữ liệu 8

1.3 Vị trí cấu trức dữ liệu trong một áp dụng tin học 8

1.4 Tìm hiểu một số cấu trúc dữ liệu cơ bản 9

1.5 Tổ chức các cấu trúc dữ liệu 10

Chương 2 : Danh sách đặc 12

Chương 3 : Danh sách liên kết 17

3.1 Vấn đề 17

3.2 Khái niệm về biến con trỏ 18

3.3 Danh sách liên kết đơn 19

3.2.3 Tìm và in danh sách cán bộ theo hệ số lương và phòng ban 28

3.2.4 Sắp xếp danh sách cán bộ theo thứ tự của tên 29

3.2.5 In danh sách hệ số lương 29

3.3 Lưu đồ thuật toán 30

5

Trang 4

Thành viênCông việc

Hoàng Trọng Giáp

1.Làm báo cáo bài tập lớn2.Tìm và in danh sách cán bộ theo hệ số lương và phòng ban

3.Sắp xếp danh sách cán bộ theothứ tự của tên.

4.In danh sách hệ số lương, biết rằng các hệ số lương trùng nhau sẽ chỉhiển thị 1 lần.

5.Hàm menu()

Cao Xuân Trường

1.Khai báo danh sách cán bộ2.Tạo danh sách cán bộ3.Hiển thị danh sách cán bộ

2.In danh sách cán bộ theo chứcvụ

Bảng phân công công việc

Trang 5

I LỜI NÓI ĐẦU

Cấu trúc dữ liệu và giải thuật (Data Structure and Algorithm) là một môn học cơ sở trongchương trình đào tạo sinh viên chuyên ngành Hệ thống thông tin quản lý và CNTT của trườngĐại học Công nghệ Đông Á Mục đích của môn học là trang bị cho sinh viên những kiến thứccơ bản về cấu trúc dữ liệu khi thiết kế và cài đặt các phần mềm

7

Trang 6

1.2 Quan hệ giữa giải thuật và cấu trúc dữ liệu

chọn, sẽ có những giải thuật tương ứng, phù hợp Khi cấu trúc dữ liệu thay đổi thường giảithuật cũng phải thay đổi theo để tránh việc xử lý gượng ép, thiếu tự nhiên trên một cấu trúckhông phù hợp Hơn nữa, một cấu trúc dữ liệu tốt sẽ giúp giải thuật xử lý trên đó có thể pháthuy tác dụng tốt hơn, vừa nhanh vừa tiết kiêm vật tư, giải thuật cũng đơn giản và dễ hiểu hơn

1.3 Vị trí cấu trức dữ liệu trong một áp dụng tin học

Cấu trúc dữ liệu thường được đặt ở lớp dữ liệu của ứng dụng Lớp dữ liệu chịu trách nhiệm lưu trữ và truy cập dữ liệu Cấu trúc dữ liệu xác định cách dữ liệu được lưu trữ trong bộ nhớ máy tính.

Cấu trúc dữ liệu cũng có thể được đặt ở lớp trình điều khiển Lớp trình điều khiển chịu trách nhiệm truy cập dữ liệu từ các nguồn bên ngoài, chẳng hạn như cơ sở

Cấu trúc dữ liệu + Gỉai thuật = Chươngtrình

Trang 7

dữ liệu hoặc tệp Cấu trúc dữ liệu xác định cách dữ liệu được lưu trữ và truy cập từ các nguồn bên ngoài.

1.4 Tìm hiểu một số cấu trúc dữ liệu cơ bản

Cấu trúc dữ liệu là một cách thức để lưu trữ và tổ chức dữ liệu trong bộ nhớ máy tính Cấu trúc dữ liệu tốt sẽ giúp ứng dụng hoạt động hiệu quả và hiệu quả hơn.

Dưới đây là một số cấu trúc dữ liệu cơ bản:

Mảng là một cấu trúc dữ liệu tuyến tính trong đó các phần tử được lưu trữ theo một thứ tự liên tiếp trong bộ nhớ Mảng có thể được truy cập bằng cách sử dụng chỉ số.

Danh sách liên kết

Danh sách liên kết là một cấu trúc dữ liệu tuyến tính trong đó các phần tử được liên kết với nhau bằng các con trỏ Danh sách liên kết có thể được thêm hoặc xóa các phần tử một cách dễ dàng.

Ngăn xếp

Ngăn xếp là một cấu trúc dữ liệu tuyến tính trong đó các phần tử được thêm và xóa theo thứ tự LIFO (Last In First Out).

9

Trang 9

Cấu trúc dữ liệu tuyến tính là các cấu trúc dữ liệu trong đó các phần tử được lưu trữ theo một thứ tự tuyến tính Ví dụ về cấu trúc dữ liệu tuyến tính bao gồm mảng,danh sách và ngăn xếp.

Cấu trúc dữ liệu phi tuyến tính

Cấu trúc dữ liệu phi tuyến tính là các cấu trúc dữ liệu trong đó các phần tử không được lưu trữ theo một thứ tự tuyến tính Ví dụ về cấu trúc dữ liệu phi tuyến tínhbao gồm cây và đồ thị.

1.6 Lựa chọn cấu trúc dữ liệu

Khi lựa chọn cấu trúc dữ liệu cho một ứng dụng, cần xem xét các yếu tố sau:

Kiểu dữ liệu cần lưu trữ

Số lượng dữ liệu cần lưu trữ

Các truy vấn dữ liệu cần được thực hiện

Hiệu suất và khả năng mở rộng cần thiết

Việc lựa chọn cấu trúc dữ liệu phù hợp sẽ giúp ứng dụng hoạt động hiệu quả vàhiệu quả hơn.

1.7 Ứng dụng của các cấu trúc dữ liệu

Các cấu trúc dữ liệu được sử dụng trong tất cả các loại ứng dụng tin học Ví dụ,mảng được sử dụng để lưu trữ dữ liệu số, danh sách được sử dụng để lưu trữ danh sách các mục, và cây được sử dụng để lưu trữ dữ liệu có cấu trúc.

Dưới đây là một số ứng dụng cụ thể của các cấu trúc dữ liệu:

o Lưu trữ dữ liệu số

o Lưu trữ dữ liệu văn bản

o Lưu trữ dữ liệu nhị phân

Danh sách liên kết

o Thêm hoặc xóa các phần tử một cách dễ dàng11

Trang 10

o Duyệt các phần tử theo thứ tự ngược lại

Ngăn xếp

o Lưu trữ dữ liệu theo thứ tự LIFO

o Thực hiện các phép toán như đảo ngược một chuỗi

Hàng đợi

o Lưu trữ dữ liệu theo thứ tự FIFO

o Thực hiện các phép toán như tìm kiếm dữ liệu nhanh chóng

o Lưu trữ dữ liệu có cấu trúc

o Tìm kiếm dữ liệu nhanh chóng

Chương 2 : Danh sách đặc2.1 Tổ chức vật lý và logic

Trang 11

o Định dạng: Các phần tử được lưu trữ liên tiếp trong bộ nhớ.

o Vị trí: Mảng được lưu trữ trong bộ nhớ chính.

o Thứ tự: Các phần tử được lưu trữ theo thứ tự liên tiếp.

o Kiểu dữ liệu: Kiểu dữ liệu của các phần tử trong mảng.

o Kích thước phần tử: Kích thước của mỗi phần tử trong mảng.

o Khoảng cách: Các phần tử được lưu trữ cách nhau một khoảng cách bằng

kích thước của mỗi phần tử.

o Mối quan hệ: Các phần tử trong mảng không có mối quan hệ với nhau.

Danh sách liên kết

o Kích thước: Số phần tử trong danh sách liên kết.

o Định dạng: Các phần tử được liên kết với nhau bằng các con trỏ.

o Vị trí: Danh sách liên kết có thể được lưu trữ trong bộ nhớ chính hoặc bộ nhớ

o Thứ tự: Các phần tử có thể được lưu trữ theo thứ tự hoặc không theo thứ tự.

o Kiểu dữ liệu: Kiểu dữ liệu của các phần tử trong danh sách liên kết.

o Kích thước phần tử: Kích thước của mỗi phần tử trong danh sách liên kết.

o Khoảng cách: Khoảng cách giữa các phần tử là không xác định.

o Mối quan hệ: Các phần tử trong danh sách liên kết có thể có mối quan hệ với

2.2 Các thao tác cập nhật trên danh sách đặc

13

Trang 12

Danh sách đặc trưng là một cấu trúc dữ liệu tuyến tính trong đó các phần tử được lưu trữ theo thứ tự liên tiếp trong bộ nhớ Danh sách đặc trưng có thể được cập nhật bằng cách sử dụng các thao tác sau:

push_back(): Thêm phần tử vào cuối danh sách.

insert(): Thêm phần tử vào một vị trí cụ thể trong danh sách.

Xóa phần tử

Thao tác xóa phần tử khỏi danh sách đặc trưng có thể được thực hiện bằng cách sử dụng các phương thức sau:

pop_back(): Xóa phần tử cuối cùng trong danh sách.

erase(): Xóa phần tử tại một vị trí cụ thể trong danh sách.

#include <iostream>#include <list>

using namespace std;int main() {

// Tạo một danh sách đặc trưng

list<int> list_numbers = {1, 2, 3, 4, 5};

// Thêm phần tử vào cuối danh sách

1 10 4 5

Trang 13

2.3 Tìm kiếm

Tìm kiếm tuyến tính: Tìm kiếm tất cả các phần tử trong danh sách cho đến khi tìm

thấy phần tử có giá trị cụ thể.

Tìm kiếm nhị phân: Tìm kiếm phần tử có giá trị cụ thể bằng cách chia danh sách

thành hai nửa và tiếp tục tìm kiếm trong nửa có chứa phần tử có giá trị cụ thể.

2.4 Sắp xếp trong

Sắp xếp trong danh sách đặc trưng là một thao tác sắp xếp các phần tử trong danh sách theo một thứ tự cụ thể Có nhiều thuật toán sắp xếp khác nhau có thể được sử dụng cho danh sách đặc trưng, bao gồm:

Sắp xếp chèn: Sắp xếp các phần tử bằng cách chèn từng phần tử vào vị trí thích hợp

trong danh sách đã được sắp xếp.

Sắp xếp chọn: Sắp xếp các phần tử bằng cách chọn phần tử nhỏ nhất trong danh sách

và chèn nó vào vị trí thích hợp trong danh sách đã được sắp xếp.

Sắp xếp nổi bọt: Sắp xếp các phần tử bằng cách so sánh các phần tử liền kề và hoán

đổi vị trí của chúng nếu chúng không được sắp xếp theo thứ tự.

Sắp xếp nhanh: Sắp xếp các phần tử bằng cách chia danh sách thành hai nửa và tiếp

tục sắp xếp các nửa đó cho đến khi đạt được kết quả mong muốn.

2.5 Các thuật toán sắp xếp ngoài

Sắp xếp ngoài là một loại sắp xếp dữ liệu trong đó dữ liệu được lưu trữ trên một thiết bị lưu trữ ngoài, chẳng hạn như đĩa cứng hoặc SSD Các giải thuật sắp xếp ngoài phải giải quyết các vấn đề sau:

Cách đọc dữ liệu từ thiết bị lưu trữ ngoài: Các giải thuật sắp xếp ngoài phải đọc dữ

liệu từ thiết bị lưu trữ ngoài theo một cách hiệu quả.

Cách lưu trữ dữ liệu đã sắp xếp: Các giải thuật sắp xếp ngoài phải lưu trữ dữ liệu đã

sắp xếp trên thiết bị lưu trữ ngoài một cách hiệu quả.

Các giải thuật sắp xếp ngoài phổ biến

Sắp xếp bán ngoài: Sắp xếp bán ngoài là một giải thuật sắp xếp trong đó dữ liệu

được lưu trữ trên bộ nhớ chính và thiết bị lưu trữ ngoài.

Sắp xếp ngoài hoàn toàn: Sắp xếp ngoài hoàn toàn là một giải thuật sắp xếp trong đó

dữ liệu được lưu trữ hoàn toàn trên thiết bị lưu trữ ngoài.15

Trang 14

Sắp xếp bán ngoài

Sắp xếp bán ngoài là một giải thuật sắp xếp trong đó dữ liệu được lưu trữ trên bộ nhớ chính và thiết bị lưu trữ ngoài Các giải thuật sắp xếp bán ngoài thường được sử dụng cho các danh sách lớn, trong đó dữ liệu không thể được lưu trữ hết trong bộ nhớ chính.

Một số giải thuật sắp xếp bán ngoài phổ biến bao gồm:

Sắp xếp merge: Sắp xếp merge là một giải thuật sắp xếp bán ngoài trong đó dữ liệu

được chia thành các phần nhỏ và sau đó được sắp xếp theo từng phần.

Sắp xếp quicksort: Sắp xếp quicksort là một giải thuật sắp xếp bán ngoài trong đó dữ

liệu được chia thành các phần nhỏ và sau đó được sắp xếp theo từng phần.

Sắp xếp heapsort: Sắp xếp heapsort là một giải thuật sắp xếp bán ngoài trong đó dữ

liệu được lưu trữ trong một heap và sau đó được sắp xếp bằng cách sử dụng các phép toán heapify.

Sắp xếp ngoài hoàn toàn

Sắp xếp ngoài hoàn toàn là một giải thuật sắp xếp trong đó dữ liệu được lưu trữhoàn toàn trên thiết bị lưu trữ ngoài Các giải thuật sắp xếp ngoài hoàn toàn thường được sử dụng cho các danh sách rất lớn, trong đó dữ liệu không thể được lưu trữ hết trong bộ nhớ chính.

Một số giải thuật sắp xếp ngoài hoàn toàn phổ biến bao gồm:

Sắp xếp bucket: Sắp xếp bucket là một giải thuật sắp xếp ngoài hoàn toàn trong đó

dữ liệu được chia thành các nhóm dựa trên giá trị của nó.

Sắp xếp phân đoạn: Sắp xếp phân đoạn là một giải thuật sắp xếp ngoài hoàn toàn

trong đó dữ liệu được chia thành các phân đoạn nhỏ và sau đó được sắp xếp theo từng phân đoạn.

Sắp xếp chèn: Sắp xếp chèn là một giải thuật sắp xếp ngoài hoàn toàn trong đó dữ

liệu được sắp xếp bằng cách chèn từng phần tử vào vị trí thích hợp trong danh sách đã được sắp xếp.

So sánh các giải thuật sắp xếp ngoài

Các giải thuật sắp xếp ngoài có thể được so sánh dựa trên các tiêu chí sau:

Trang 15

Kích thước dữ liệu: Các giải thuật sắp xếp ngoài hoàn toàn có thể được sử dụng cho

các danh sách rất lớn, trong khi các giải thuật sắp xếp bán ngoài chỉ có thể được sử dụng cho các danh sách lớn.

Yêu cầu bộ nhớ: Các giải thuật sắp xếp bán ngoài yêu cầu bộ nhớ chính để lưu trữ dữ

liệu đang được sắp xếp, trong khi các giải thuật sắp xếp ngoài hoàn toàn không yêu cầu bộ nhớ chính.

Thời gian chạy: Thời gian chạy của các giải thuật sắp xếp ngoài phụ thuộc vào kích

thước của danh sách và thuật toán được sử dụng.

Hiệu quả: Hiệu quả của các giải thuật sắp xếp ngoài phụ thuộc vào kích thước của

danh sách và thuật toán được sử dụng.

2.6 Tổng kết danh sách đặc ưu , khuyết

Ưu điểm

Thêm và xóa phần tử nhanh chóng: Các phần tử có thể được thêm và xóa khỏi danh

sách đặc trưng một cách nhanh chóng và hiệu quả.

Dễ dàng truy cập các phần tử: Các phần tử trong danh sách đặc trưng có thể được

truy cập bằng cách sử dụng chỉ số.

Dễ dàng cập nhật các phần tử: Các phần tử trong danh sách đặc trưng có thể được

cập nhật một cách dễ dàng.

Nhược điểm

Sử dụng nhiều bộ nhớ: Danh sách đặc trưng sử dụng nhiều bộ nhớ hơn các cấu trúc

dữ liệu tuyến tính khác, chẳng hạn như mảng.

Không hiệu quả cho các thao tác tìm kiếm: Các thao tác tìm kiếm trong danh sách

đặc trưng có thể không hiệu quả nếu danh sách lớn.

Tổng kết

Danh sách đặc trưng là một cấu trúc dữ liệu linh hoạt và hiệu quả có thể được sử dụng cho nhiều ứng dụng Tuy nhiên, cần lưu ý các ưu điểm và nhược điểm của danh sách đặc trưng để lựa chọn cấu trúc dữ liệu

Chương 3 : Danh sách liên kết3.1 Vấn đề

Danh sách liên kết là một cấu trúc dữ liệu tuyến tính trong đó các phần tử được liên kết với nhau bằng các con trỏ Danh sách liên kết có thể được sử dụng để lưu trữ

17

Trang 16

các danh sách có thể thay đổi kích thước, chẳng hạn như danh sách các mục tiêu cần hoàn thành hoặc danh sách các tệp cần xử lý.

Danh sách liên kết có một số vấn đề cần lưu ý, bao gồm:

Tốn bộ nhớ

Khả năng truy cập ngẫu nhiên kém

Khả năng thay đổi kích thước kém

Một số giải pháp cho các vấn đề của danh sách liên kết

Sử dụng danh sách liên kết 2 chiều

Sử dụng cấu trúc dữ liệu khác

Kết luận

Danh sách liên kết là một cấu trúc dữ liệu linh hoạt và hiệu quả có thể được sử dụng cho nhiều ứng dụng Tuy nhiên, cần lưu ý các vấn đề của danh sách liên kết để lựa chọn cấu trúc dữ liệu phù hợp với ứng dụng cụ thể.

3.2 Khái niệm về biến con trỏ

Biến con trỏ là một biến có thể lưu trữ địa chỉ của một biến khác Biến con trỏ thường được sử dụng để truy cập các biến hoặc dữ liệu nằm ở vị trí khác trong bộ nhớ.

Khai báo biến con trỏ

int* p; // Biến p trỏ đến một biến int

double* q; // Biến q trỏ đến một biến double

Gán giá trị cho biến con trỏ

int x = 10;

int* p = &x; // Gán địa chỉ của biến x cho biến p

Truy cập giá trị của biến được trỏ đến

Trang 17

int x = 10;

int* p = &x;

cout << *p; // In giá trị của biến x

//Chuyển đổi giá trị của biến con trỏ

int x = 10;

int* p = &x;

int y = *p; // Chuyển đổi giá trị của biến p thành biến y

3.3 Danh sách liên kết đơn

Danh sách liên kết đơn là một cấu trúc dữ liệu tuyến tính trong đó các phần tử được liên kết với nhau bằng các con trỏ Mỗi phần tử trong danh sách liên kết đơn chỉ có một con trỏ trỏ đến phần tử tiếp theo trong danh sách.

Cấu trúc dữ liệu của danh sách liên kết đơn

struct Node {

int data; // Giá trị của phần tử

Node* next; // Con trỏ trỏ đến phần tử tiếp theo};

Các thao tác trên danh sách liên kết đơn

Tạo danh sách liên kết đơn

Thêm phần tử vào danh sách liên kết đơn

Xóa phần tử khỏi danh sách liên kết đơn

Tìm kiếm phần tử trong danh sách liên kết đơn

Duy trì danh sách liên kết đơnKhởi tạo danh sách liên kết đơn

19

Trang 18

void CreateList(List &I){I.pHead=NULL;

Ví dụ về danh sách liên kết đơn

// Tạo danh sách liên kết đơn Node* head = new Node();

Node* iter = head;while (iter != nullptr) { cout << iter->data << " ";

iter = iter->next;}

Đoạn mã trên sẽ in ra kết quả sau:1 2 3 4 5

Ưu điểm và nhược điểm của danh sách liên kết đơnƯu điểm:

Trang 19

 Khả năng thay đổi kích thước hiệu quả: Các phần tử có thể được thêm hoặc xóa khỏi danh sách liên kết đơn mà không cần thay đổi kích thước của danh sách.

 Không cần cấp phát bộ nhớ liên tục: Mỗi phần tử trong danh sách liên kết đơn có thể được cấp phát ở bất kỳ vị trí nào trong bộ nhớ.

int data; // Giá trị của phần tử

Node* next; // Con trỏ trỏ đến phần tử tiếp theo};

Trong danh sách liên kết vòng, con trỏ next của phần tử cuối cùng trỏ đến phần tử đầu tiên Điều này tạo thành một vòng, với phần tử đầu tiên là phần tử cuối cùng và ngược lại.

Các thao tác trên danh sách liên kết vòng

21

Ngày đăng: 23/06/2024, 15:15

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w