You are on page 1of 20

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

Cấu trúc dữ liệu 1 vá thuật giải Click To Edit

1
NỘIMaster

DANH SÁCH LIÊN KẾT KÉP


DUNGTitle Style
Định Nghĩa
Click To Edit Master Title Style
• Mỗi phần tử liên kết với phần tử đứng trước
và sau nó trong danh sách
• Hình vẽ minh họa danh sách liên kết kép:
Cấu trúc dữ liệu 1 vá thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

A B C D

2
CấuClick
Trúc Dữ
To Liệu
Edit Master Title Style
• Cấu trúc dữ liệu 1 nút
typedef struct tagnode
{ Data Info; // thành phần chứa thông tin
struct tagnode *Pre; // trỏ đến ptu đứng trc
struct tagnode *Next; //trỏ đến ptu đứng sau
Cấu trúc dữ liệu 1 vá thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

}Node;
• Cấu trúc List kép
typedef struct tagList
{ Node *Head; // con trỏ đặc biệt trỏ vào đầu DS
Node *Tail; // con trỏ đặc biệt trỏ vào đuôi DS
}List;
3
CácClick
Thao To
TácEdit
TrênMaster
List Kép Title Style
• Khởi tạo danh sách liên kết kép rỗng
• Tạo 1 nút có thành phần dữ liệu = x
• Chèn 1 phần tử vào danh sách
– Chèn vào đầu
– Chèn sau phần tử Q
– Chèn vào trước phần tử Q
Cấu trúc dữ liệu 1 vá thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

– Chèn vào cuối danh sách


• Huỷ 1 phần tử trong danh sách
– Hủy phần tử đầu danh sách
– Hủy phần tử cuối danh sách
– Hủy 1 phần tử có khoá bằng x
• Tìm 1 phần tử trong danh sách
• Sắp xếp danh sách
4
TạoClick
1 Danh
ToSách
EditRỗng
Master Title Style

void CreateList(List &DS)


{
DS.Head=NULL;
Cấu trúc dữ liệu 1 vá thuật giải

DS.Tail=NULL;
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

5
TạoClick
1 Nút To
Có Edit
Thành Phần Dữ
Master LiệuStyle
Title =X
Node *CreateNode(int x)
{ Node *tam;
tam=new Node;
if(tam==NULL)
{ printf("khong con du bo nho");
exit(1); }
Cấu trúc dữ liệu 1 vá thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

else { tam->Info=x;
tam->Next=NULL;
tam->Pre=NULL;
return tam; }
}

6
Thêm 1 Nút
Click ToVào Đầu
Edit Danh Sách
Master Title Style
• Minh họa hình vẽ

pHead
A B C D
Cấu trúc dữ liệu 1 vá thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

X pTail

7
CàiClick
Đặt Thêm 1 NútMaster
To Edit Vào ĐầuTitle
DanhStyle
Sách
void AddFirst(List &DS, Node *tam)
{
if(DS.Head==NULL) //xau rong
{ DS.Head=tam;
DS.Tail=DS.Head; }
else
Cấu trúc dữ liệu 1 vá thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

{ tam->Next=DS.Head;
DS.Head->Pre=tam;
DS.Head=tam; }
}

8
Thêm VàoTo
Click Cuối Danh
Edit Sách
Master Title Style
• Minh họa thêm 1 phần tử vào sau danh sách

pTail
pHead
Cấu trúc dữ liệu 1 vá thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

A B C D

9
CàiClick
Đặt Thêm 1 NútMaster
To Edit Vào Cuối Danh
Title Sách
Style
void AddEnd(List &DS,Node *tam)
{
if(DS.Head==NULL) // xâu rỗng
{ DS.Head=tam;
DS.Tail=DS.Head; }
else
Cấu trúc dữ liệu 1 vá thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

{
tam->Pre=DS.Tail;
DS.Tail->Next=tam;
DS.Tail=tam;
}
}

10
Click
Thêm VàoTo Edit
Sau Nút Master
Q Title Style
• Minh họa thêm nút X vào sau nút q

pHead q pTail
Cấu trúc dữ liệu 1 vá thuật giải

A B C D
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

11
CàiClick
Đặt Thêm 1 NútMaster
To Edit Vào SauTitle
Nút QStyle
void AddLastQ(List &DS,Node *p, Node *q)
{ // p là phần tử cần thêm vào
Node *tam;
tam=q->Next; // tam là phần tử đứng sau q
if(q!=NULL) //them vao duoc
{
p->Next=tam;
p->Pre=q;
Cấu trúc dữ liệu 1 vá thuật giải

tam->pre=p;
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

q->Next=p;
if(q==DS.Tail) //xet trường hợp riêng q là đuôi của DS.
DS.Tail=p;
}
else
AddEnd(DS,p);
}

12
Thêm 1 Nút
Click ToVào Trước
Edit Nút Q
Master Title Style
• Minh hoạ thêm 1 nút vào trước nút q

pHead q pTail
Cấu trúc dữ liệu 1 vá thuật giải

A B C D
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

13
CàiClick
Đặt Thêm 1 NútMaster
To Edit Vào Trước Nút
Title Q
Style
void AddBeforeQ(List &DS,Node *p,Node *q) // p là phần tử thêm vào
{ Node *tam; // là phần tử đứng trước q
tam=q->Pre;
if(q!=NULL)
{ p->Next=q;
p->Pre=tam;
q->Pre=p;
Cấu trúc dữ liệu 1 vá thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

tam->Next = p;
if(q==DS.Head) // xét trường hợp q trùng với Head
DS.Head = p; }
else
AddFirst(DS,p);
}

14
XoáClick
Phần To
Tử Edit
Đầu Danh Sách
Master Title Style
void DeleteFirst(List &DS)
{
Node *tam;
if(DS.Head!=NULL) // Danh sách khác trống
{ tam=DS.Head;
DS.Head=DS.Head->Next;
Cấu trúc dữ liệu 1 vá thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

DS.Head->Pre=NULL;
delete tam;
if(DS.Head==NULL) // trường hợp DS có 1 phần tử
DS.Tail=NULL; }
}

15
XoáClick
1 Phần
ToTử Cuối
Edit Danh Sách
Master Title Style
void DeleteEnd(List &DS)
{
Node *tam;
if(DS.Head!=NULL) // xau co phan tu
{
tam=DS.Tail;
Cấu trúc dữ liệu 1 vá thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

DS.Tail=DS.Tail->Pre;
DS.Tail->Next=NULL;
delete tam;
if(DS.Tail==NULL) // xau có 1 phần tử
DS.Head=NULL;
}
}
16
HủyClick
1 NútTo
SauEdit
Nút Master
Q Title Style
void DeleteLastQ(List &DS,Node *q)
{
Node *tam; // luu node dung sau node q
if(q!=NULL)
{
tam=q->Next; // tam đứng sau q
if(tam!=NULL)
{ q->Next=tam->Next;
Cấu trúc dữ liệu 1 vá thuật giải

if(tam==DS.Tail) //xoa dung nu't cuoi


CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

DS.Tail=q;
else //Nut xoa khong phai nut cuoi
q->Next->Pre=q;
delete tam; }
}
else
DeleteFirst(DS);
}

17
HuỷClick
1 NútTo
Đứng Trước
Edit Nút Q
Master Title Style
void DeleteBeforeQ(List &DS,Node *q)
{
Node *tam;
if(q!=NULL) //tuc ton tai node q
{
tam=q->Pre;
if(tam!=NULL)
{ q->Pre=tam->Pre;
Cấu trúc dữ liệu 1 vá thuật giải

if(tam==DS.Head)//dau cua danh sach


CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

DS.Head=q;
else // không phai la node dau
q->Pre->Next=q;
delete tam; }
} else
DeleteEnd(DS);
}

18
XoáClick
1 Phần
ToTử Có Master
Edit Khoá = XTitle Style
int DeleteX(List &DS,int x)
{
Node *q,*tam;
q=DS.Head;
while(q!=NULL)
{
if(q->Info==x)
break;
Cấu trúc dữ liệu 1 vá thuật giải

q=q->Next;
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

}
if(q==NULL) return 0;//khong tim thay Node nao co truong Info =x
if(q!=NULL)
{ tam = q->Pre;
tam -> Next = q->Next;
tam->Next->Pre = tam;
if (tam == DS.Head && tam == DS.Tail )
{ DS.Head = NULL; DS.Tail= NULL}
delete tam;
return 1;}
19
SắpClick
Xếp To Edit Master Title Style
void DoiChoTrucTiep(List &DS)
{ Node *p,*q;
p=DS.Head;
while(p!=DS.Tail)
{
q=p->Next;
Cấu trúc dữ liệu 1 vá thuật giải
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 1

while(q!=NULL)
{
if(p->Info>q->Info)
HV(p->info,q->info);
q=q->Next;
}
p=p->pNext;
}} 20

You might also like