Tải bản đầy đủ (.pdf) (8 trang)

Khái quát về cấu trúc dữ liệu phần 4 pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (211.27 KB, 8 trang )

25
© 2004, HOÀNG MINH SƠN
Chương 4: Khái quát về cấutrúcdữ liệu
Bổ sung dữ liệu
Dữ liệuA
Dữ liệuB
Dữ liệuX
Dữ liệuY0x00
Dữ liệuC
pHead
Dữ liệuT
pHead
Dữ liệuA
Dữ liệuB
Dữ liệuX
Dữ liệuY0x00
Dữ liệuC
pHead
Dữ liệuT
Bổ sung vào giữa danh sách
Bổ sung vào ₫ầudanhsách
26
© 2004, HOÀNG MINH SƠN
Chương 4: Khái quát về cấutrúcdữ liệu
Xóa bớtdữ liệu
Dữ liệuA
Dữ liệuB
Dữ liệuX
Dữ liệuY0x00
Dữ liệuC
pHead


Dữ liệuA
Dữ liệuB
Xóa dữ liệu ₫ầudanhsách
Dữ liệuC
Dữ liệuX
Dữ liệuY0x00
pHead
Xóa dữ liệugiữadanhsách
27
© 2004, HOÀNG MINH SƠN
Chương 4: Khái quát về cấutrúcdữ liệu
Các ₫ặc ₫iểm chính
 Ưu ₫iểm:
—Sử dụng rấtlinhhoạt, cấpphátbộ nhớ khi cần và xóa khi
không cần
—Bổ sung và xóa bỏ mộtdữ liệu ₫ượcthựchiện thông qua
chuyểncon trỏ, thờigianthựchiệnlàhằng số, không phụ
thuộcvàochiều dài và vị trí
—Cóthể truy nhậpvàduyệtcácphầntử theo kiểutuầntự
 Nhược ₫iểm:
—Mỗidữ liệubổ sung mới ₫ềuphải ₫ượccấpphátbộ nhớ₫ộng
—Mỗidữ liệuxóabỏ₫i ₫ềuphải ₫ượcgiải phóng bộ nhớ tương
ứng
—Nếukiểudữ liệu không lớnthìphần overhead chiếmtỉ lệ lớn
—Tìmkiếmdữ liệutheokiểutuyến tính, mấtthờigian
28
© 2004, HOÀNG MINH SƠN
Chương 4: Khái quát về cấutrúcdữ liệu
Ví dụ: Danh sách thông báo (hộpthư)
#include <string>

using namespace std;
struct MessageItem {
string subject;
string content;
MessageItem* pNext;
};
struct MessageList {
MessageItem* pHead;
};
void initMessageList(MessageList& l);
void addMessage(MessageList&, const string& sj,
const string& ct);
bool removeMessageBySubject(MessageList& l,
const string& sj);
void removeAllMessages(MessageList&);
29
© 2004, HOÀNG MINH SƠN
Chương 4: Khái quát về cấutrúcdữ liệu
#include "List.h"
void initMessageList(MessageList& l) {
l.pHead = 0;
}
void addMessage(MessageList& l, const string& sj,
const string& ct) {
MessageItem* pItem = new MessageItem;
pItem->content = ct;
pItem->subject = sj;
pItem->pNext = l.pHead;
l.pHead = pItem;
}

void removeAllMessages(MessageList& l) {
MessageItem *pItem = l.pHead;
while (pItem != 0) {
MessageItem* pItemNext = pItem->pNext;
delete pItem;
pItem = pItemNext;
}
l.pHead = 0;
}
30
© 2004, HOÀNG MINH SƠN
Chương 4: Khái quát về cấutrúcdữ liệu
bool removeMessageBySubject(MessageList& l,
const string& sj) {
MessageItem* pItem = l.pHead;
MessageItem* pItemBefore;
while (pItem != 0 && pItem->subject != sj) {
pItemBefore = pItem;
pItem = pItem->pNext;
}
if (pItem != 0) {
if (pItem == l.pHead)
l.pHead = 0;
else
pItemBefore->pNext = pItem->pNext;
delete pItem;
}
return pItem != 0;
}
31

© 2004, HOÀNG MINH SƠN
Chương 4: Khái quát về cấutrúcdữ liệu
Chương trình minh họa
#include <iostream>
#include "list.h"
using namespace std;
void main() {
MessageList myMailBox;
initMessageList(myMailBox);
addMessage(myMailBox,"Hi","Welcome, my friend!");
addMessage(myMailBox,"Test","Test my mailbox");
addMessage(myMailBox,"Lecture Notes","Programming Techniques");
removeMessageBySubject(myMailBox,"Test");
MessageItem* pItem = myMailBox.pHead;
while (pItem != 0) {
cout << pItem->subject << ":" << pItem->content << '\n';
pItem = pItem->pNext;
}
char c;
cin >> c;
removeAllMessages(myMailBox);
}
32
© 2004, HOÀNG MINH SƠN
Chương 4: Khái quát về cấutrúcdữ liệu
Bài tậpvề nhà
 Xây dựng kiểu danh sách móc nốichứacácngàylễ
trong nămvàý nghĩacủamỗi ngày (string), cho
phép:
—Bổ sung mộtngàylễ vào ₫ầudanhsách

—Tìmý nghĩacủamộtngày(₫ưa ngày tháng là tham số)
—Xóabỏ₫imộtngàylễở₫ầu danh sách
—Xóabỏ₫imộtngàylễởgiữadanhsách(₫ưa ngày tháng là
tham số)
—Xóabỏ₫itoànbộ danh sách
 Viếtchương trình minh họacáchsử dụng

×