Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Danh sách và con trỏ, sai chỗ nào vậy?

  1. #1
    Ngày gia nhập
    03 2009
    Bài viết
    2

    Wink Danh sách và con trỏ, sai chỗ nào vậy?

    đây là mã tôi đang viết dở, đang viết thì vướng mắc
    vướng mắc ở chỗ tôi muốn nó nhập và xuất một danh sách thì nó chỉ xuất có người đầu tiên trong danh sách còn lại quăng hết, tui ngâm hoài mà không biết mình nhầm lẫn tư tưởng chỗ nào hết, anh em giúp đỡ cái nhé
    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3. #include <stdio.h>
    4. #include <string.h>
    5. #include <conio.h>
    6. #include <process.h>
    7. typedef struct hs
    8. {
    9.     int point;
    10.     int id;
    11.     char name[50];
    12.     struct hs *next;
    13. };
    14. struct hs *A,*B,*pdau,*pcuoi;
    15. void push(char n[],int p, int i);
    16. void pop();
    17. void print();
    18. //void findname();
    19. //void findpoint();
    20.  
    21. void main()
    22. {
    23.     A=(struct hs *) malloc(sizeof(struct hs));
    24.     cout << "Nhap thong tin thanh vien: \n";
    25.     int i=0,p=0;
    26.     char n[50];
    27.     do
    28.     {
    29.         cout << "Thanh vien thu " <<i<<endl;
    30.         cout << "   Name : ";
    31.         cin >> n;
    32.         fflush(stdin);
    33.         cout << "   Point: ";
    34.         cin >> p;
    35.         fflush(stdin);
    36.         push(n,p,i);
    37.         cout << "Press any key to continue, else ESC to escape!\n";
    38.         i++;
    39.         if (pdau==NULL)
    40.         {
    41.             pdau=A;pdau->next=NULL;
    42.         };
    43.     }
    44.     while (getch()!=27);
    45.     A=pdau;
    46.     print();
    47.     getch();
    48. };
    49. void push(char n[], int p, int i)
    50. {
    51.     struct hs *p1;
    52.     p1=(struct hs *) malloc(sizeof(struct hs));
    53.     strcpy(p1->name,n);
    54.     p1->id=i;
    55.     p1->point=p;
    56.     p1->next=A;
    57.     A=p1;
    58.     A->next=NULL;
    59. };
    60. void print()
    61. {
    62.     struct hs *p1;
    63.     p1=A;
    64.     while (p1!=NULL)
    65.     {
    66.         cout << "Thanh vien thu: " << p1->id<<endl;
    67.         cout << "   Name : " <<p1->name<<endl;
    68.         cout << "   Point: " <<p1->point<<endl;
    69.         p1= p1->next;
    70.         cout <<endl;
    71.     };
    72. };
    Mr Ngô

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    1.bạn nên tham khảo bài viết này để có cách khai báo cấu trúc trong sáng và dễ làm việc hơn
    http://forums.congdongcviet.com/showthread.php?t=16195


    2. danh sách của bạn thật khó hiểu, mình ko thể nhìn thấy head và tail của nó đâu cả.

    3. đơn giản và dễ hiểu thôi
    vòng lặp trong main lần 1 :
    bạn nhập vào A với :
    thông tin nhập,
    a->next=NULL;

    và head của bạn gán = A => head->next bằn NULL.

    vòng lặp 2:
    nhập tiếp vào danh sách..................... (không biết có đúng ko)


    phương pháp của bạn là chèn vào đầu danh sách.
    vậy cái pdau cua bạn nó trỏ vào A đầu tiên cũng là phần tử cuối cùng trong danh sách.

    cái sai ở chỗ đó
    ....

    quan trọng nhất là bạn nên làm tường minh lại cách module, các hàm, tường minh lại cách khai báo......
    tham kháo bài viết trên kia đi
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  3. #3
    Ngày gia nhập
    08 2008
    Nơi ở
    ha noi
    Bài viết
    79

    Mình đã sửa cho bàn rồi này nhưng mình thấy bài bạn thiếu sót rất nhiều bạn nên mở sách ra đọc kỹ hướng dẫn sử dụng trc' khi dùng
    đây là code mình sửa


    C++ Code:
    1. #include <iostream.h>
    2. #include <stdio.h>
    3. #include <string.h>
    4. #include <conio.h>
    5. #include <process.h>
    6. #include <alloc.h>
    7. typedef struct hs
    8. {
    9.     int point;
    10.     int id;
    11.     char name[50];
    12.     struct hs *next;
    13. };
    14. struct hs *pdau,*pcuoi;
    15. void pop();
    16. void print();
    17.  
    18. void main()
    19. {
    20.     clrscr();
    21.     hs *p;
    22.     [B][U]pdau=NULL;[/U][/B] phần tử đầu của danh sách liên kết chứa hằng NULL
    23.     cout << "Nhap thong tin thanh vien: \n";
    24.     int i=0,temp=0;
    25.     char n[50];
    26.     do
    27.     {
    28.         cout << "Thanh vien thu " <<i<<endl;
    29.         cout << "   Name : ";
    30.         cin >> n;
    31.         fflush(stdin);
    32.         cout << "   Point: ";
    33.         cin >> temp;
    34.         fflush(stdin);
    35.         if(pdau==NULL)
    36.             {
    37.                 pdau=(hs*)malloc(sizeof(hs));
    38.                 pdau=p;
    39.             }
    40.         else
    41.             {
    42.                 p->next=(hs*)malloc(sizeof(hs));
    43.                 p=p->next;
    44.             }
    45.  
    46.         strcpy(p->name,n);
    47.         p->point=temp;
    48.         [B][I]pcuoi=p;[/I][/B] // bạn gán p=pdau nhưng ko gán pcuoi=p nên nó chỉ in ra phần tử đầu là đúng rồi
    49.         p->next=NULL;
    50.         cout << "Press any key to continue, else ESC to escape!\n";
    51.         i++;
    52.     }
    53.     while (getch()!=27);
    54.     p=pdau;
    55.     print();
    56.     getch();
    57. };
    58. void print()
    59. {
    60.     struct hs *p;
    61.     p=pdau;
    62.     while (p!=NULL)
    63.     {
    64.         cout << "Thanh vien thu: " << p->id<<endl;
    65.         cout << "   Name : " <<p->name<<endl;
    66.         cout << "   Point: " <<p->point<<endl;
    67.         p=p->next;
    68.         cout <<endl;
    69.     };
    70. };
    P/S:Nếu có sai sót mong mọi người chỉ bảo dùm

  4. #4
    Ngày gia nhập
    01 2009
    Bài viết
    165

    Trích dẫn Nguyên bản được gửi bởi quicksilver89 Xem bài viết
    Mình đã sửa cho bàn rồi này nhưng mình thấy bài bạn thiếu sót rất nhiều bạn nên mở sách ra đọc kỹ hướng dẫn sử dụng trc' khi dùng
    đây là code mình sửa


    Code:
    #include <iostream.h>
    #include <stdio.h>
    #include <string.h>
    #include <conio.h>
    #include <process.h>
    #include <alloc.h>
    typedef struct hs
    {
    	int point;
    	int id;
    	char name[50];
    	struct hs *next;
    };
    struct hs *pdau,*pcuoi;
    void pop();
    void print();
    
    void main()
    {
    	clrscr();
    	hs *p;
    	pdau=NULL; phần tử đầu của danh sách liên kết chứa hằng NULL
    	cout << "Nhap thong tin thanh vien: \n";
    	int i=0,temp=0;
    	char n[50];
    	do
    	{
    		cout << "Thanh vien thu " <<i<<endl;
    		cout << "	Name : ";
    		cin >> n;
    		fflush(stdin);
    		cout << "	Point: ";
    		cin >> temp;
    		fflush(stdin);
    		if(pdau==NULL)
    			{
    				pdau=(hs*)malloc(sizeof(hs));
    				pdau=p;
    			}
    		else
    			{
    				p->next=(hs*)malloc(sizeof(hs));
    				p=p->next;
    			}
    
    		strcpy(p->name,n);
    		p->point=temp;
    		pcuoi=p; // bạn gán p=pdau nhưng ko gán pcuoi=p nên nó chỉ in ra phần tử đầu là đúng rồi
    		p->next=NULL;
    		cout << "Press any key to continue, else ESC to escape!\n";
    		i++;
    	}
    	while (getch()!=27);
    	p=pdau;
    	print();
    	getch();
    };
    void print()
    {
    	struct hs *p;
    	p=pdau;
    	while (p!=NULL)
    	{
    		cout << "Thanh vien thu: " << p->id<<endl;
    		cout << "	Name : " <<p->name<<endl;
    		cout << "	Point: " <<p->point<<endl;
    		p=p->next;
    		cout <<endl;
    	};
    };
    P/S:Nếu có sai sót mong mọi người chỉ bảo dùm
    cả 2 bạn chẳng ai làm đúng cả.các bạn về copy chương trình vào máy để tự sửa thì hay hơn đó.

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi kimduquan Xem bài viết
    cả 2 bạn chẳng ai làm đúng cả.các bạn về copy chương trình vào máy để tự sửa thì hay hơn đó.
    cả 2 bạn là bao gồm những ai thế bạn
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  6. #6
    Ngày gia nhập
    03 2009
    Bài viết
    2

    Mặc định Danh sách và con trỏ, sai chỗ nào vậy?

    cám ơn rất nhiều, mình đã làm được. vấn đề là mình sai mỗi một câu A->next=NULL khiến mọi thứ vừa gán lại trở về chưa gán
    hic hic, newbie mờ..
    Mr Ngô

Các đề tài tương tự

  1. Bài tập C++ Tách chẵn lẽ thành 2 danh sách trong danh sách liên kết đơn?
    Gửi bởi leo009394 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 01-01-2012, 04:52 PM
  2. Khai báo và hiển thị danh sách sinh viên bằng danh sách đặc trong C
    Gửi bởi tyrant trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 04-10-2011, 10:23 AM
  3. Bài tập C++ Nhập xuất danh sách liên kết với lập trình C++, lúc nào cũng ra danh sách rỗng?
    Gửi bởi Le thi Ngoc Lan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 24-01-2011, 12:37 PM
  4. Nhập xuất danh sách bằng Danh Sách Liên Kết như thế nào?
    Gửi bởi hvcuongit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 10-12-2010, 10:16 AM
  5. Danh sách liên kết, code nhập danh sách sinh viên có lỗi làm sao sửa?
    Gửi bởi acmilan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 10-04-2009, 08:24 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn