danh sach lk don

Màu nền
Font chữ
Font size
Chiều cao dòng

Tao nut vao tao danh sach lien ket don

void khoitao

(LIST &&

l

{

l

.

pHead

=

l

.

pTail

=

NULL

}

NODE 

tao_nut

int x

{    

NODE 

*

=new 

NODE

        if(

==

NULL

        {

cout

<<

"

 khong du bo nho:"

        exit(

0

        }

->

data

=

x

->

pNext

=

NULL

        return 

}

void tao_ds

(LIST &&

l

{    

int x

NODE 

*

    do{

cout

<<

"

 nhap x="

cin

x

    if(

x

==-

1

    break;

=

tao_nut

x

    if(

l

.

pHead

==

NULL

l

.

pHead

=

l

.

pTail

=

    else{

l

.

pTail

->

pNext

=

l

.

pTail

=

    }

    }while(

1

}

void xuat

(LIST 

l

{    for(

NODE 

*

=

l

.

pHead

=

->

pNext

    {

//p=&data;

cout

<<

->

data

<<

" -> "

    }

cout

<<

"NULL"

}

Tạo danh sách liên kết đơn bằng cách tự động nhập random

void Tao_DS_RANDOM

(LIST &&

l

{    

int x

NODE 

*

=

1

cout

<<

"Ban muon nhap bao nhieu phan tu: "

cin

    while(

<=

    {

=

tao_nut

rand

()%

100

        if(

l

.

pHead

==

NULL

l

.

pHead

=

l

.

pTail

=

        else {

l

.

pTail

->

pNext

=

l

.

pTail

=

        }

=

++;

    }

Xóa các phần tử trùng trên dslk đơn

void Xoa_PT_Trung

(LIST &&

l

{

NODE 

*

p1

, *

p2

, *

truocp2

p1

=

l

.

pHead

        while(

p1

// con tro p1 chay tu dau

{        

p2

=

truocp2

=

p1

->

pNext

            while(

p2

// con tro p2 chay sau p1

{

                if(

p1

->

data 

== 

p2

->

data

// so sanh data p1 va p2

{

                    while(

truocp2

!=

p2

                    {

truocp2

=

truocp2

->

pNext

                    }

xoa_node_p

l

,

p2

p2

=

truocp2

->

pNext

                }

                else 

p2

=

p2

->

pNext

            }

p1

=

p1

->

pNext

        }

}

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

void themcuoi

(LIST &&

l

{        

//khoitao(l);

int x

cout

<<

"

 nhap x="

cin

x

NODE 

*

=

tao_nut

x

        if(

l

.

pTail

==

NULL

l

.

pHead

=

l

.

pTail

=

        else

        {

l

.

pTail

->

pNext

=

l

.

pTail

=

        }

}

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

void themdau

(LIST &&

l

{    

//khoitao(l);

int x

cout

<<

"

 nhap x="

cin

x

NODE 

*

=

tao_nut

x

    if(

l

.

pHead

==

NULL

l

.

pHead

=

l

.

pTail

=

    else

    {

->

pNext

=

l

.

pHead

l

.

pHead

=

    }

}

Thêm phần tử y vào trước phần tử x trên danh sách liên kết đơn

int them_truoc_y_ptx

(LIST &&

l

,

int x

,

int y

{

NODE 

*

=

tao_nut

y

NODE 

*

q

=

timx

l

,

x

        if(

l

.

pHead

==

NULL

                return 

0

        else

        {if(

q

==

NULL

         return 

1

        if(

q

==

l

.

pHead

themdau

l

        else

        {

NODE 

*

k

=

l

.

pHead

        while(

k

->

pNext

!=

q

k

=

k

->

pNext

->

pNext

=

q

k

->

pNext

=

                 return 

3

        }

        }        

}

Thêm phần tử y sau phần tử x trên danh sách liên kết đơn

int them_sau_y_ptx

(LIST &

l

,

int x

,

int y

{

NODE 

*

=

tao_nut

y

NODE 

*

q

=

timx

l

,

x

    if(

l

.

pHead

==

NULL

        return 

0

    if(

q

==

NULL

     return 

1

    if(

q

==

l

.

pTail

themcuoi

l

    else

    {

->

pNext

=

q

->

pNext

q

->

pNext

=

    return 

3

    }

}

Xóa phần tử trước phần tử X và xóa sau phần tử X

int xoapt_truocx

(LIST &&

l

,

int x

{        

NODE 

*

=

timx

l

,

x

        if(

l

.

pHead

==

NULL

// dsach rong

return 

0

        if(

==

NULL

// khong tim thay

return 

1

        if(

==

l

.

pHead

// phan tu can tim dung dau dsach

return 

2

        if(

l

.

pHead

->

pNext

==

// phan tu dung thu 2 trong dsach

{   

xoadau

l

                return 

3

        }

        else

        {

NODE 

*

k

=

l

.

pHead

                while(

k

->

pNext

!=

k

=

k

->

pNext

// tim duoc nut k ke p

NODE 

*

q

=

l

.

pHead

                while(

q

->

pNext

!=

k

q

=

q

->

pNext

// tim duoc nut ke nut k

q

->

pNext

=

                return 

4

        }

}

int xoapt_saux

(LIST &

l

,

int x

{

NODE 

*

=

timx

l

,

x

        if(

l

.

pHead

==

NULL

                return 

0

        if(

==

NULL

                return 

1

        if(

==

l

.

pTail

        {

                return 

2

        }

        else

        {        

NODE 

*

k

=

->

pNext

NODE 

*

=

k

->

pNext

->

pNext

=

        }

}

Xóa phần tử có giá trị x trên danh sách liên kết đơn

int xoaptx

(LIST &&

l

,

int x

{        

NODE 

*

=

timx

l

,

x

        if(

l

.

pHead

==

NULL

                return 

0

        if(

==

NULL

                return 

1

        if(

==

l

.

pHead

        {

xoadau

l

        return 

2

        }

        if(

==

l

.

pTail

        {

xoacuoi

l

        return 

4

        }

        else

        {

NODE 

*

k

=

l

.

pHead

        while(

k

->

pNext

!=

k

=

k

->

pNext

k

->

pNext

=

->

pNext

        return 

3

        }

}

Tìm phần tử lớn nhất (max) trên danh sách liên kết

NODE

timmax

(LIST 

l

{    

NODE 

*

=

l

.

pHead

    for(

NODE 

*

k

=

l

.

pHead

->

pNext

k

k

=

k

->

pNext

    {    if(

k

->

data

->

data

=

k

    }

cout

<<

"

 gia tri max="

<<

->

data

cout

<<

"

            "

          return 

    return 

NULL

}

Viết hàm tìm phần tử X trong danh sach lien ket

NODE* timx(LIST l,int x)

{

for(NODE *p=l.pHead;p;p=p->pNext)

if(p->data==x)

return p;

return NULL;

}

Nối 2 danh sách liên kết đơn

void noi_ds2

(LIST &&

l

,LIST &

l1

,LIST &

l2

{        

khoitao

l1

khoitao

l2

cout

<<

"

Nhap danh sach l1. Ket thuc -1"

tao_ds

l1

cout

<<

"

Nhap danh sach l2. Ket thuc -1"

tao_ds

l2

        if(

l1

.

pHead

==

NULL

l

=

l2

        if(

l2

.

pHead

==

NULL

l

=

l1

        else{

l1

.

pTail

->

pNext

=

l2

.

pHead

l

.

pHead

=

l1

.

pHead

l

.

pTail

=

l2

.

pTail

        }

Tính tổng các phần tử trên dslk đơn

long tong_list

(LIST 

l

{

NODE 

*

k

=

l

.

pHead

0

        for(

k

k

!=

NULL

k

=

k

->

pNext

        {

+=

k

->

data

        }

        return 

}

Sao chép các phần tử trên danh sách liên kết đơn

void Sao_chep(LIST l,LIST &&l2)

{

khoitao(l2);

NODE * p, *p2;

p=l.pHead;

while (p)

{

p2=tao_nut(p->data);

if(l2.pHead==NULL)

l2.pHead=l2.pTail=p2;

else{

l2.pTail->pNext=p2;

l2.pTail=p2;

}

p=p->pNext;

}

Xóa toàn bộ các phần tử trên dslk đơn

void xoa_LIST

(LIST &&

l

{

NODE 

*

l

.

pHead

        while(

k

!=

NULL

        {

l

.

pHead

=

k

->

pNext

k

=

l

.

pHead

        }

}

Kiểm tra, đếm và in các số nguyên tố ra màn hình

int KTSNT

{

        if(

<

2

) return 

0

        for(

=

2

<=

2

++)

                if(

%

==

0

) return 

0

        return 

1

}

int dem_so_ngto

(LIST 

l

{

NODE 

*

k

=

l

.

pHead

int dem

=

0

        for(

k

k

!=

NULL

k

=

k

->

pNext

        {

                if(

KTSNT

k

->

data

) == 

1

dem

++;

        }

        return 

dem

}

void in_so_ngto

(LIST 

l

{

NODE 

*

k

=

l

.

pHead

        for(

k

k

!=

NULL

k

=

k

->

pNext

        {

                if(

KTSNT

k

->

data

) == 

1

cout

<<

k

->

data

<<

" "

        }

}

Đảo ngược danh sách liên kết đơn

void Dao_dsach

(LIST &&

l

{

NODE 

*

left 

, *

right

,*

k

,*

left

=

l

.

pHead

right

=

l

.

pTail

    while(

left

!=

right

    {

hoanvi

left

->

data

,

right

->

data

left

=

left

->

pNext

// left ++

=

l

.

pHead

        while(

->

pNext

!=

right

// right--

=

->

pNext

        }

right

=

    }

}

Bạn đang đọc truyện trên: Truyen2U.Pro