Chèn phần tử vào danh sách liên kết

Hỏi về cách chèn phần tử trong danh sách liên kết

programming
c++
linked-list
kkkbik (thdung6198) March 7, 2021, 7:16am #1

Chào mọi người trên diễn đàn!
Nay mới học đến phần này táy máy làm thử thì hơi bị ngờ ngợ chỗ này
Chả là bài tập thì kêu là sắp xếp 1 danh sách liên kết đơn gồm có tên,mssv và đtb của sinh viên!
Mình làm được hết cả rồi

Chèn phần tử vào danh sách liên kết
Theo struct ấy mấy bác chứ ko phải class nha
Chèn phần tử vào danh sách liên kết

Nhưng khi đến khúc gay go là yêu cầu chèn thêm 1 sv với tên, mssv , dtb vào danh sách liên kết đã sắp xếp theo điểm trung bình thì hơi bị tắt ở đấy.
Chèn phần tử vào danh sách liên kết
Cái chính là sau khi chèn thì danh sách ấy vẫn là 1 danh sách đã sắp xếp theo chiều tăng dần rồi ấy??
Mọi người có cách nào giúp đả thông vụ này với ạ!!
À C++ nha mấy bác
Chèn phần tử vào danh sách liên kết

noname00 (HK boy) November 9, 2017, 2:08pm #2

Vì bạn không đưa ngôn ngữ bạn sử dụng là gì nên mình chỉ cho bạn mã giả thôi:

void add(item): for i = 0 -> n-1: if sv[i] < item && item < sv[i+1]: // bạn không đưa ra điều kiện so sánh, // tạm đặt toán tử '<' để biểu diễn // quan hệ nhỏ hơn -> nhỏ hơn xếp trước insert(item, i+1) // chèn item vào vị trí i+1
1 Like
Sasuke (Uchiha Sasuke) November 9, 2017, 2:11pm #3

Cái chính ở đây là phải biết được nó được sắp xếp theo dữ liệu nào ?

1 Like
kkkbik (thdung6198) November 9, 2017, 2:19pm #4

Mình dùng ngôn ngữ c++ và cái danh sách liên kết thì sắp xếp theo điểm trung bình ấy

Sasuke (Uchiha Sasuke) November 9, 2017, 2:50pm #5

bạn có thể duyệt 1 danh sách liên kết rồi in ra số phần tử, số dtb của từng p/tử (node) không ?

kkkbik (thdung6198) November 9, 2017, 2:58pm #6

Được á bạn? mấy đó mình làm đc hết cả rồi

Chèn phần tử vào danh sách liên kết

Sasuke (Uchiha Sasuke) November 9, 2017, 2:59pm #7

danh sách liên kết của bạn được cài đặt bằng mảng hay là con trỏ vậy

kkkbik (thdung6198) November 9, 2017, 3:08pm #8

Con trỏ bác ơi

Chèn phần tử vào danh sách liên kết
Chĩ cần giúp mình đã thông làm sao để chèn vô là mình làm đc òi
Chèn phần tử vào danh sách liên kết
ko cần code lắm đâu

Sasuke (Uchiha Sasuke) November 9, 2017, 3:10pm #9

danh sách liên kết đơn hay kép vậy ? thường là khi chèn 1 phần tử phải chia ra 3 trường hợp, là chèn vào đầu, chèn vào cuối hay chèn vào vị trí giữa

Sasuke (Uchiha Sasuke) November 9, 2017, 3:13pm #10

chèn vào giữa: duyệt tới node x mình cần chèn vào sau, tạo ra 1 node mới có dữ liệu cần chèn cho nó trỏ tới node mà x trỏ tới, rồi cho x trỏ tới cái node vừa tạo, danh sách liên kết đơn nhé

kkkbik (thdung6198) November 9, 2017, 3:20pm #11

DS Đơn bác ơi

Chèn phần tử vào danh sách liên kết
trường hợp này mình nói rõ mà
Chèn phần tử vào danh sách liên kết
ko biết nên chèn vào đâu và chèn ntn ấy mới hỏi nè
Chèn phần tử vào danh sách liên kết

Tại vì cái cần chèn thì nhập vô. Mà cái danh sách thì đã sort rồi. Có thể nó sẽ nhỏ hơn số đầu => chèn đầu
Có thể nó sẽ nhỏ hơn số cuối => chèn cuối
Hoặc có thể chèn bất kì
Chèn phần tử vào danh sách liên kết

Khang_Viet (Khang Việt) November 9, 2017, 3:33pm #12

nếu vậy mỗi lần chèn , thì cứ cho nó chèn cuối , rồi sắp xếp lại à @@!

kkkbik (thdung6198) November 9, 2017, 3:42pm #13

Nếu vậy thì nó đơn giản rồi ông ơi

Chèn phần tử vào danh sách liên kết
Cái chính là chèn vào luôn vẫn ko làm mất thứ tự ấy. Ko đc sắp xếp lại lần nữa mà

nguyenhuuca (Nguyen Ca) November 10, 2017, 3:39am #14

tạo 2 hàm add đầu, với add sau là được
khi nhập phân từ mới kiêm tra điêu kiện để quyết định chèn vào đâu.

void addfirst(list &l,node *newnode) { if(l.phead==NULL) { l.phead=newnode; l.ptail=l.phead; } else { newnode->pnext=l.phead; l.phead=newnode; } } void addfter(list &l,node *q,node*newnode) { if(q!=NULL) { newnode->pnext=q->pnext; q->pnext=newnode; if(q==l.ptail) l.ptail=newnode; } else { addfirst(l,newnode); } } void them_sv(list &l) { node*newnode; node*p,*truoc_p=NULL; p=l.phead; sinhvien sv; //sap_xep(l); printf(" \nnhap ma so :\t"); scanf("%d",&sv.masv); fflush(stdin); printf(" nhap ho ten:\t"); gets(sv.hoten); newnode=getnode(sv); if(newnode->info.masv< l.phead->info.masv) addfirst(l,newnode); else while(p!=NULL && (p->info.masv< newnode->info.masv)) { truoc_p=p; p=p->pnext; } addfter(l,truoc_p,newnode); }

all truct

template void hoanvi(KDL &a,KDL &b) { KDL tam; tam=a; a=b; b=tam; } typedef struct sinhvien { int masv; char hoten[35]; }; typedef struct node { sinhvien info; node*pnext; }; typedef struct list { node *phead; node*ptail; };
1 Like