[Programming] xen một phần tử vào danh sách ghép nối trong c |
04/05/2008 07:41:56 (+0700) | #1 | 128778 |
|
motminhanh
Member
|
0 |
|
|
Joined: 06/01/2008 15:43:07
Messages: 101
Location: Homeland corp!
Offline
|
|
mình có đoạn mã sau
Code:
#include<conio.h>
#include<stdio.h>
#include<alloc.h>
#include<string.h>
#include<stdlib.h>
struct nhan_su
{
char name[20];
char age;
};
main()
{
struct nhan_su *last=NULL,*ptr;
char ten[20];
//tao danh sach ghep noi
printf("tao danh sach\n");
do
{
printf("ten:");
gets(ten);
if(ten[0]!=NULL)
{
ptr=(struct nhan_su *) calloc(1,sizeof(struct nhan_su));
strcpy(ptr->name,ten);
printf("tuoi:");
scanf("%d",&ptr->age);
printf("\n");
fflush(stdin);
ptr->next=last;
last=ptr;
}
}
while(ten[0]!=NULL);
//viet danh sach da tao ra
printf("viet lai danh sach\n");
while(ptr!=NULL)
{
printf("ten:%s\n",ptr->name);
printf("tuoi:%d\n\n",ptr->age);
}
/*gia su ta nhap 2 nguoi
nguoi mot: name=mot,age=1
nguoi hai: name=hai,age=2
*/
//xen nguoi ten ba vao giua mot va hai
struct nhan_su *q;
q=(struct nhan_su *) calloc(1,sizeof(struct nhan_su));
strcpy(q->name,"ba");
q->age=3;
while((ptr!=NULL)&&(strcmp(ptr->name,"hai"))
ptr=ptr->next;
q->next=ptr->next;
ptr->next=q;
ptr=last;
//viet lai danh sach sau khi da chen
while(ptr!=NULL)
{
printf("ten=%s\n",ptr->name);
printf("tuoi:%d\n\n",ptr->name);
printf("tuoi:%d\n\n",ptr->age);
ptr=ptr->next;
}
}
mình có chút thắc mắc như sau:
1.mình không thể hiểu được đoạn
Code:
while((ptr!=NULL)&&(strcmp(ptr->name,"hai"))
ptr=ptr->next;
strcmp(ptr->name,"hai") ở đây có nghĩa là gi`?,rõ ràng nó không có ý so sánh ptr->name và "hai" rồi
vì nếu ta thay nó bằng strcmp(ptr->name,"hai") thì kết quả sẽ khác
2.tại sao mình lại phải cần đoạn code đó?,mình bỏ đi kết quả vẫn thấy nó như vậy
nhờ các cao thủ chỉ giáo giùm,thank trước! |
|
|
|
|
[Question] Re: xen một phần tử vào danh sách ghép nối trong c |
04/05/2008 18:12:56 (+0700) | #2 | 128852 |
|
learn2hack
Elite Member
|
0 |
|
|
Joined: 29/06/2006 16:32:37
Messages: 825
Offline
|
|
strcmp(ptr->name,"hai") ở đây có nghĩa là gi`?,rõ ràng nó không có ý so sánh ptr->name và "hai" rồi vì nếu ta thay nó bằng strcmp(ptr->name,"hai") thì kết quả sẽ khác
2 chỗ màu vàng của bạn thực sự là 1 mà, phải không?
Về câu hỏi này, đúng là tác giả muốn so sánh ptr->name với "hai", vì như phần comment ở trên đã ghi rõ:
/*gia su ta nhap 2 nguoi
nguoi mot: name=mot,age=1
nguoi hai: name=hai,age=2
*/
Ở đây so sánh với "hai" nhằm kiểm tra xem đó có phải là người thứ 2 không thôi. Nếu bạn thay đổi tên người cuối cùng và dùng code này thì phải thay đổi tên tương úng.
Còn tại sao dùng đoạn code đó thì bạn xem thêm cách duyệt trong danh sách liên kết 1 chiều. Vì trong VD này tác giả dùng có 2 bản ghi nên khó nhận biết, bạn tăng số bản ghi lên thì sẽ thấy nó hoạt động đúng hay không. |
|
Blog: http://hontap.blogspot.com
Tải phần mềm miễn phí: http://www.taiphanmem.org |
|
|
|
[Question] Re: xen một phần tử vào danh sách ghép nối trong c |
04/05/2008 22:48:08 (+0700) | #3 | 128860 |
|
motminhanh
Member
|
0 |
|
|
Joined: 06/01/2008 15:43:07
Messages: 101
Location: Homeland corp!
Offline
|
|
xin lỗi,hôm qua mình viết nhầm
strcmp(ptr->name,"hai") ở đây có nghĩa là gi`?,rõ ràng nó không có ý so sánh ptr->name và "hai" rồi vì nếu ta thay nó bằng strcmp(ptr->name,"hai") thì kết quả sẽ khác
thực tế đoạn này phải la:
strcmp(ptr->name,"hai") ở đây có nghĩa là gi`?,rõ ràng nó không có ý so sánh ptr->name và "hai" rồi vì nếu ta thay nó bằng strcmp(ptr->name,"hai")==0, thì kết quả sẽ khác
mong các bạn chỉ giáo hộ |
|
|
|
|
[Question] Re: xen một phần tử vào danh sách ghép nối trong c |
04/05/2008 23:44:24 (+0700) | #4 | 128865 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
if( strcmp(ptr->name,"hai")) --> sẽ thực hiện biểu thức của if(){} khi strcmp() trả về khác 0
if(strcmp(ptr->name,"hai")==0) --> thực hiện khi strcmp() trả về 0
do đó hai trường hợp trên là hoàn toàn khác nhau, tuy nhiên bạn lại thấy nó thực hiện ra cùng 1 kết quả là do bạn chỉ có 2 bản ghi, bạn tăng thêm bản ghi sẽ thấy chúng khác nhau. |
|
|
[Question] Re: xen một phần tử vào danh sách ghép nối trong c |
05/05/2008 08:37:01 (+0700) | #5 | 128923 |
|
motminhanh
Member
|
0 |
|
|
Joined: 06/01/2008 15:43:07
Messages: 101
Location: Homeland corp!
Offline
|
|
cám ơn các bồ nhiều |
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|