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

Thông tin cơ bản

Tiêu đề Ứng dụng danh sách liên kết vòng đơn vào quản lý nhân sự
Tác giả Hoàng Trọng Giáp, Cao Xuân Trường, Nguyễn Quốc Đại
Trường học Trường Đại học Công nghệ Đông Á
Chuyên ngành Cấu trúc dữ liệu và giải thuật
Thể loại Bài tập lớn
Năm xuất bản 2023
Thành phố Bắc Ninh
Định dạng
Số trang 31
Dung lượng 636,93 KB

Cấu trúc

  • II. LÝ THUYẾT (6)
  • 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 (6)
    • 1.1 Giải thuật (6)
    • 1.2 Quan hệ giữa giải thuật và cấu trúc dữ liệu (6)
    • 1.3 Vị trí cấu trức dữ liệu trong một áp dụng tin học (6)
    • 1.4 Tìm hiểu một số cấu trúc dữ liệu cơ bản (7)
    • 1.5 Tổ chức các cấu trúc dữ liệu (8)
  • Chương 2 Danh sách đặc (10)
  • Chương 3 Danh sách liên kết (15)
    • 3.1 Vấn đề (15)
    • 3.2 Khái niệm về biến con trỏ (16)
    • 3.3 Danh sách liên kết đơn (17)
    • 3.4 Danh sách liên kết vòng (19)
    • 3.5 ứng dụng của danh sách liên kết (22)
    • III. THỰC HÀNH (23)
      • 3.1 Input (24)
      • 3.2 Output (24)
        • 3.2.1 Quá trình nhập danh sách sẽ dừng lại khi nhập mã cán bộ <= 0 (24)
        • 3.2.2 Tìm và in danh sách cán bộ theo Chức vụ (25)
        • 3.2.3 Tìm và in danh sách cán bộ theo hệ số lương và phòng ban (25)
        • 3.2.4 Sắp xếp danh sách cán bộ theo thứ tự của tên (26)
        • 3.2.5 In danh sách hệ số lương (26)
      • 3.3 Lưu đồ thuật toán (27)

Nội dung

LÝ THUYẾT

- Giải thuật ( Thuật toán ) : Một dãy hữu hạn các chỉ thị có thể thi hành để đạt mục tiêu đề ra nào đó

- Ví dụ : Thuật toán tính tổng tất cả các số nguyên dương nhỏ hơn n gồm các bước sau :

Bước 3 : i = i+1 Quay lại bước 2 ; Bước 4 : Tổng cần tìm là S

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

Với một 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ải thuậ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úc khô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át huy 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ở

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

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

Giải thuật

- Giải thuật ( Thuật toán ) : Một dãy hữu hạn các chỉ thị có thể thi hành để đạt mục tiêu đề ra nào đó

- Ví dụ : Thuật toán tính tổng tất cả các số nguyên dương nhỏ hơn n gồm các bước sau :

Bước 3 : i = i+1 Quay lại bước 2 ;Bước 4 : Tổng cần tìm là S

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

Với một 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ải thuậ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úc khô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át huy 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

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ở

8Cấu trúc dữ liệu + Gỉai thuật = Chương trình 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.

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 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 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).

Hàng đợi 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ự FIFO (First In First Out).

Cây là một cấu trúc dữ liệu phi tuyến tính trong đó các phần tử được liên kết với nhau theo một thứ tự cây Cây có thể được sử dụng để lưu trữ dữ liệu có cấu trúc.

 Đồ thị Đồ thị là một cấu trúc dữ liệu phi tuyến tính trong đó các phần tử được liên kết với nhau theo một thứ tự đồ thị Đồ thị có thể được sử dụng để lưu trữ dữ liệu có mối quan hệ giữa các phần tử.

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

Các cấu trúc dữ liệu có thể được tổ chức thành hai loại chính: cấu trúc dữ liệu tuyến tính và cấu trúc dữ liệu phi tuyến tính.

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

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ính bao 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:

 Mảng 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àng 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

 Cây o Lưu trữ dữ liệu có cấu trúc o Tìm kiếm dữ liệu nhanh chóng

Danh sách đặc

2.1 Tổ chức vật lý và logic

2.1.1 Các đặc tổ chức vật lý

 Kích thước o Số phần tử trong cấu trúc dữ liệu

 Định dạng o Cách các phần tử được lưu trữ trong bộ nhớ

 Vị trí o Vị trí của cấu trúc dữ liệu trong bộ nhớ

2.1.2 Các đặc tổ chức logic

 Thứ tự o Thứ tự mà các phần tử được lưu trữ trong cấu trúc dữ liệu

 Kiểu dữ liệu o Kiểu dữ liệu của các phần tử trong cấu trúc dữ liệu

 Kích thước phần tử o Kích thước của mỗi phần tử trong cấu trúc dữ liệu

 Khoảng cách o Khoảng cách giữa các phần tử trong cấu trúc dữ liệu

 Mối quan hệ o Mối quan hệ giữa các phần tử trong cấu trúc dữ liệu

 Mảng o Kích thước: Số phần tử trong mảng. 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ớ ngoài. 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 nhau.

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

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:

Thao tác thêm phần tử vào 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:

 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.

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.

Thao tác cập nhật phần tử trong 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:

 operator: Cập nhật giá trị của phần tử tại một vị trí cụ thể trong danh sách.

 find(): Tìm vị trí của phần tử cần cập nhật.

 replace(): Cập nhật giá trị của phần tử tại một vị trí cụ thể trong danh sách

#include #include using namespace std ; int main() {

// Tạo một danh sách đặc trưng list < int > list_numbers = { 1 , 2 , 3 ,

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

 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ể.

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.

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.

Danh sách liên kết

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ữ 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:

 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

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ể.

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

18 int x = 10; int* p = &x; cout data = 1; head->next = new Node(); head->next->data = 2; head->next->next = new Node(); head->next->next->data = 3; head->next->next->next = new Node(); head->next->next->next->data = 4; head->next->next->next->next = new Node(); head->next->next->next->next->data = 5; // In danh sách liên kết đơn

Node* iter = head;while (iter != nullptr) { cout data 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:

 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ớ.

 Khả năng truy cập ngẫu nhiên kém: Để truy cập một phần tử cụ thể trong danh sách liên kết đơn, cần phải duyệt qua tất cả các phần tử trước đó.

 Sử dụng nhiều bộ nhớ: Mỗi phần tử trong danh sách liên kết đơn phải chứa một con trỏ, điều này có thể làm tăng kích thước của danh sách.

Danh sách liên kết đơn 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 liên kết đơn để lựa chọn cấu trúc dữ liệu phù hợp với ứng dụng cụ thể.

Danh sách liên kết vòng

Danh sách liên kết vòng là một biến thể của danh sách liên kết đơn trong đó con trỏ của phần tử cuối cùng trỏ trở lại phần tử đầu tiên, tạo thành một vòng.

Cấu trúc dữ liệu của danh sách liên kết vòng struct Node { 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

 Tạo danh sách liên kết vòng

 Thêm phần tử vào danh sách liên kết vòng

 Xóa phần tử khỏi danh sách liên kết vòng

 Tìm kiếm phần tử trong danh sách liên kết vòng

 Duy trì danh sách liên kết vòng

Khai báo dữ liệu node

Khai báo dữ liệu node trong danh sách liên kết vòng đơn bao gồm hai trường:

 data: Lưu trữ dữ liệu của node.

 next: Trỏ đến node tiếp theo trong danh sách.

Ví dụ, nếu muốn khai báo một node lưu trữ dữ liệu kiểu int, ta có thể khai báo như sau: struct Node { int data; struct Node *next;

Khai báo danh sách liên kết vòng đơn Để khai báo một danh sách liên kết vòng đơn, ta cần khai báo một biến trỏ đến node đầu tiên. struct Node *head;

Tạo danh sách liên kết vòng đơn rỗng Để tạo một danh sách liên kết vòng đơn rỗng, ta gán giá trị NULL cho biến head. head = NULL;

Thêm node vào danh sách liên kết vòng đơn Để thêm một node vào danh sách liên kết vòng đơn, ta có thể sử dụng các thao tác sau:

 Thêm node vào đầu danh sách: Gán node mới cho biến head và gán next của node mới trỏ đến node cũ.

// Thêm node vào đầu danh sách struct Node *node = malloc(sizeof(struct Node)); node->data = 10; node->next = head; head = node;

 Thêm node vào cuối danh sách: Khởi tạo một node mới, sau đó gán next của node cuối cùng trỏ đến node mới

// Thêm node vào cuối danh sách struct Node *node = malloc(sizeof(struct Node)); node->data = 20;

// Tìm node cuối cùng struct Node *last = head; while (last->next != NULL) { last = last->next;

} // Gán next của node cuối cùng trỏ đến node mới last->next = node;

 Thêm node vào vị trí bất kỳ: Khởi tạo một node mới, sau đó gán next của node trước node cần thêm trỏ đến node mới.

// Thêm node vào vị trí bất kỳ struct Node *node = malloc(sizeof(struct Node)); node->data = 30;

// Tìm node trước node cần thêm struct Node *prev = head; while (prev->data < 50) { prev = prev->next;

// Gán next của node trước node cần thêm trỏ đến node mới prev->next = node;

Duyệt danh sách liên kết vòng đơn Để duyệt danh sách liên kết vòng đơn, ta có thể sử dụng vòng lặp while với điều kiện next != NULL.

// Duyệt danh sách liên kết vòng đơn struct Node *node = head; while (node != NULL) { // Xử lý dữ liệu của node Cin>> node->data

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

HÌNH ẢNH LIÊN QUAN

Đồ thị là một cấu trúc dữ liệu phi tuyến tính trong đó các phần tử được liên kết  với nhau theo một thứ tự đồ thị - đề 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ự
th ị là một cấu trúc dữ liệu phi tuyến tính trong đó các phần tử được liên kết với nhau theo một thứ tự đồ thị (Trang 8)

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

TÀI LIỆU LIÊN QUAN

w