1. Trang chủ
  2. » Giáo Dục - Đào Tạo

DANH SÁCH móc nối (lập TRÌNH c TRONG WINDOW) (chữ biến dạng do slide dùng font VNI times, tải về xem bình thường)

32 28 0

Đ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

Định dạng
Số trang 32
Dung lượng 254,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Phương hướng giải quyết cho vấn đề này là cho phép cấp phát bộ nhớ cho một cấu trúc mới khi cần thiết... C cho phép ta thực hiện điều này thông qua cáhc cấp phát bộ nhớ động bằng:malloc

Trang 1

CHƯƠNG VIII

DANH SÁCH

MÓC NỐI

Trang 2

DANH SÁCH MÓC NỐI

Ta thương sử dụng mảng cấu trúc để xử lý với nhóm dữ liệu Đây là một cách tiếp cận đúng khi ta biết trước chính xác số các cấu trúc cần có Tuy nhiên, khi con số này không rõ ràng, mãng sẽ trở nên khá tốn kém vì chúng phải được cấp phát đủ bộ nhớ để hoạt động Bố nhớ này được đăng ký và sẽ không dành cho nhứng tác vụ khác ngay cả khi ta chỉ dùng một sô nhỏ các phần tử mảng

Phương hướng giải quyết cho vấn đề này là cho phép cấp phát bộ nhớ cho một cấu trúc mới khi cần thiết

Trang 3

C cho phép ta thực hiện điều này thông qua cáhc cấp phát bộ nhớ động bằng:

malloc() và calloc()

Nhưng các cấu trúc nếu được cấp pháp xong sẽ không có đảm báo nào rằng các cấu trúc sẽ được đặt liên tiếp nhau trong bộ nhớ Do đó điều cần thiết là kỹ thuật để nối kết tất cả các cấu trúc lại với nhau.

Phương cách thông dụng để kết nối các phần tử đó lại là dùng danh sách liên kết (Linked list)

Trang 4

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

pointer trỏ đến phần cấu trúc tiếp theo trong Danh sách>

}

Ví dụ: Định nghĩa một danh sách

liên kết để chứa các số nguyên

Trang 5

2 Các phép toán trên danh sách liên kết

a Cấp phát bô nhớ cho biến con trỏ

mới

Cú pháp:

Point_New = (struct Point_Name *)

malloc (sizeof(struct Point_Name)

Trang 6

Vê duû:

typedef struct Point POINT;

POINT Head, Last, p;

CreatNode(){

p=(POINT *) malloc (POINT)

if (Head==(POINT* ) NULL)

Head=Last=p;

else{

Last=Head;

Trang 7

while (Last->Next!= (POINT*) NULL)

Trang 8

b Xoá một con trỏ:

 Tạo một phần tư của danh sách

Điều phải làm là cấp pháp bộ nhớ

cho cấu trúc và trả về con trỏ trỏ

đến vùng nhớ này.

Ví dụ:

Trang 10

Bổ sung phần tư vào danh sách

Hàm CreatNode() chỉ cấp phát bộ nhớ

nhưng nó không nối phần tử này vào

danh sách Để làm điều này, ta cần thêm một hàm nữa, gọi là hàm AddNode()

Được định nghĩa như sau:

static POINT *Head;

void AddNode(POINT *e)

Trang 11

for (p=Head; p->Next!=NULL; p=p->Next); p->Next=e;

}

Chú ý:

Biến Head là con trỏ trỏ đến đầu danh sách, nên cần được khai báo đầu chương trình.(Sau phần khai định nghĩa kiểu con trỏ).

Chèn phần tư vào danh sách

Để chèn phần tử vào danh sách liên kết, ta phải chỉ rỏ phần tử mới sẽ được chèn vào vị trí nào.Sau đây là hàm sẽ thực hiện công việc trên.

Trang 12

void InsertNode(POINT *p, POINT *q) {

Trang 13

Xoá phần tư vào danh sách

Xoá một phần tử khỏi danh sách liên

kết đơn, ta cần phải tìm phần tử trước phần tử cần xoá để nhằm mục đích nối lại với phần tử sau phần tử cần xoá Ta dùng hàm free() để giải phống

bộ nhớ chiếm bởi phần tử bị xoá

Có thể xây dưng là:

void DeleteNode(POINT *goner)

Trang 14

free(goner)

};

Trang 15

Tìm phần tư vào danh sách

Thật khó tạo một hàm FindNode() tổng quát, bởi vì khi tìm kiếm thì ta phải dựa vào một trong những trường dữ liệu của cấu trúc, điều này phụ thuộc vào cấu trúc dang sử dụng Để viết hàm FindNode() tổng quát ta phảisử dụng con trỏ trỏ đến hàm

Với cấu trúc trên ta xây dựng hàm FindNode() như sau:

Trang 17

II Danh sách đa liên kết

tiếp theo trong Danh sách>,<Tên

pointer trỏ đến phần tử cấu trúc trước đó trong danh sách>;

}

Trang 18

Ví dụ: Định nghĩa một danh sách liên kết để chứa các số nguyên.

Trang 19

III STACK và QUEUE

1 STACK

Là danh sách có móc nối đặc

biệt Mặc dầu ta có thể thực

hiệm nhiều phép toán trên danh

sách tổng quát, Stack vẫn có

những tính chất riêng biệt: chỉ

cho phép thêm và xoá bỏ các phần tử ở một vị trí duy nhất, tại đỉnh của Stack

Với đặc trưng như vậy thì Stack

có kiểu cấu trúc dữ liệu là LIFO (Last In First Out)

Trang 20

a Khởi tạo Stack

Sử dụng mảng:

int stack[100], p;

Stackinit(){

p=0;

}Sử dụng danh sách liên kết

struct Node { int info;

struct Node *Next;

};

Trang 21

typedef struct Node NODE;

Trang 22

b Đẩy dữ liệu vào Stack

Trang 24

Sử dụng danh sách liên kết:

Pop(){

Trang 25

d Kiểm tra Stack rỗng

Sử dụng mảng:

int stackempty(){

return !p;

}Sử dụng danh sách liên kết:int StackEmpty()

{

return Head->Next==p;}

Trang 26

Ví dụ: Xây dựng stack bằng danh sách liên kêt:

Trang 31

printf("\nAn Enter de tiep tuc/ESC de thoi nhap");

c=getchar();

c=getch();

}

while(c!=ESC);

printf("\nCac gia tri trong Stack\n");

while (!StackEmpty()) printf("%d ",Pop()); printf("\nAn ESC de ket thuc");

getch();

}

Trang 32

sau, và lấy ra một đầu khác,

được gọilà đầu trước

Cấu trúc này được sử dụng trong các tình huống lập trình cần xử lý một dãy các phần tử theo một trật tự cố định Việc xử lý này gọi là FIFO (First Int First Out)

Ngày đăng: 29/03/2021, 10:38

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm