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

Đề tài: Nhập xuất danh sách liên kết

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    25

    Mặc định Nhập xuất danh sách liên kết

    Mình mới học về danh sách liên kết nên chưa được hiểu rõ lắm về một chương trình hoàn chỉnh để nhập và xuất 1 DSLK. Mình cần nhập vào thông tin của một dslk sinh viên với thông tin của sinh viên là mssv và họ tên của sinh viên đó nhưng mà mình làm hoài chưa được. Có bạn nào biết hướng dẫn giúp mình nhé. Code của mình là như thế này, nếu bạn nào biết thì sửa giúp nhé. Thanks!.
    Mình viết Code trên môi trường VC++ Console.
    Code:
    #include "stdafx.h"
    #include<conio.h>
    #include<stdio.h>
    #include<iostream.h>
    #include<stdlib.h>
    
    typedef struct SinhVien
    {
    	int maso;
    	char hoten[31];
    }SV;
    
    typedef struct SinhVienNode
    {
    	SV info;
    	struct SinhVienNode *pNext;
    }SVNode;
    
    typedef struct SinhVienList
    {
    	SVNode *pHead;
    	SVNode *pTail;
    }SVList;
    
    
    SVNode *TaoSVNode(SV x)
    {
    	SVNode *p;
    	p = new SVNode;
    	if(p==NULL)
    	{
    		printf("Khong cap phat duoc vung nho. Ket thuc!");
    		getch();
    		exit(0);
    	}
    	p->info=x;
    	p->pNext=NULL;
    	return p;
    }
    void NhapSinhVien(SV &x)
    {
    	printf("Nhap ma so:");
    	scanf("%d",&x.maso);
    	printf("Nhap ho ten:");
    	gets(x.hoten);
    }
     void ThemDau(SVList &l,SVNode *ele)
    {
    	if(l.pHead==NULL)
    	{
    		l.pHead=ele;
    		l.pTail=l.pHead;
    	}
    	else
    	{
    		ele->pNext=l.pHead;
    		l.pHead=ele;
    	}
    }
    void xuat(SVList l)
    {
    	SVNode *p=l.pHead;
    	while (p)
    	{
    		printf("%d\t%s\n",p->info.maso,p->info.hoten);
    		p = p -> pNext;
    	}
    }
    void main()
    {
    	char c = getch();
    	SV x;
    	SVNode *p;
    	SVList l;
    	l.pHead = NULL;
    	l.pTail = NULL;
    	printf("Nhap 1 de them\n");
            printf("Nhap 0 de thoat\n");
    	switch(c)
    	{
    	case '1':
    		NhapSinhVien(x);
    		p = TaoSVNode(x);
    		ThemDau(l,p);
    		break;
    	}while(c!='0');
    	xuat(l);
    }
    Các bạn coi thử xem chương trình sai ở đâu giúp mình nhé. Tại chương trình này mình cũng ghép từ các code khác nhau và có sửa lại theo ý mình một chút nên trông nó khập khiễng thế đấy.
    Đã được chỉnh sửa lần cuối bởi thangtcnb : 15-12-2007 lúc 11:02 AM.

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    47

    bạn cho đoạn này vào thay thế hàm main của bạn nhé. Mình nghĩ bạn sai hàm main.

    Code:
    main() {
    	int ch = 1;
    	SV x;
    	SVNode *p;
    	SVList l;
    	
    	l.pHead = NULL;
    	l.pTail = NULL;
    	while (ch){
    		printf("Nhap 1 de them\n");
        	        printf("Nhap 0 de thoat\n");
        	        printf("Nhap lua chon: ");
    		scanf("%d",&ch);
    		if (ch==1){
    			NhapSinhVien(x);
    			p = TaoSVNode(x);
    			ThemDau(l,p);
    		}
    	}
    	xuat(l);
    	cin.ignore(2);
    }

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    25

    Cảm ơn bạn đã reply. Chương trình mình chạy có vẻ ổn hơn rồi. Nhưng mà mình cũng không hiểu ở chỗ là khi nhập chuỗi dùng hàm gets() thì chương trình lại không cho ỉnh nhập ho tên. Mình nhớ vấn đề này đã đọc ở đâu rùi nhưng giờ quên mất. Bạn thử ghép các hàm của mình và hàm main của bạn vào và chạy sẽ thấy bị lỗi.
    Một lần nữa xin cảm ơn.

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Khi dùng với hàm gets thì phải xóa vùng đệm trước khi tiến hành. Sử dụng hàm fflush(stdin);
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    47

    Trích dẫn Nguyên bản được gửi bởi Dreaminess Xem bài viết
    Khi dùng với hàm gets thì phải xóa vùng đệm trước khi tiến hành. Sử dụng hàm fflush(stdin);
    Mình quên, trong code của mình cũng sửa dòng đó rồi nhưng không thông báo lại cho bạn.
    Ví dụ ở đoạn code này:

    Code:
    printf("Nhap ma so:");
    scanf("%d",&x.maso);
    printf("Nhap ho ten:");
    gets(x.hoten);
    Đầu tiên bạn nhập mã số , là 1 số nguyên. Khi nhập xong số nguyên, bạn phải gõ enter. và kí tự xuống dòng (mã là 13) được lưu trong bộ đệm. Khi bạn gọi hàm gets mà không xóa bộ đệm thì sẽ lấy ra cả kí tự xuống dòng đó, cho nên kết quả sẽ bị sai. Để xóa bộ đệm bạn dùng hàm fflush(stdin) hoặc dùng cin.ignore(1) với C++.

    Để code của bạn hoàn chỉnh, bạn nên sửa thế này ở phần nhập nhé.

    Code:
    printf("Nhap ma so:");
    scanf("%d",&x.maso);
    fflush(stdin);
    printf("Nhap ho ten:");
    gets(x.hoten);

  6. #6
    Ngày gia nhập
    12 2007
    Bài viết
    25

    Mặc định Nhập xuất danh sách liên kết

    Thanks to All!
    Cảm ơn các bạn đã nhiệt tình post bài giải giúp mình.
    Bây giờ thì mình đã có cái nhìn mới mẻ hơn về DSLK và cách xử lý trên nó rồi, tiện đây mình có bài tập nhỏ muốn các bạn hướng dẫn để mình có thể xử lý nó.
    Code:
    Cho một DSLK đơn có phần tử đầu là Head, mỗi nút của nó biểu thị một điểm có tọa độ (x,y) trên mặt phẳng hai chiều.
        a. Hãy mô tả cấu trúc của danh sách nêu trên.
        b. Giả sử danh sách trên đã có sẵn dữ liệu. Viết chương trình(bằng ngôn ngữ tương ứng mà bạn đã chọn khi khai báo CTDL) tạo 2 danh sách liên kết mới H1 và H2 từ danh sách đã cho, trong đó:
              -H1 chứa các nút có thành phần x>0 và y>0.
              -H2 chứa các nút có thành phần x<0 và y<0.
              -Các nút khác còn lại của danh sach HEAD sẽ được in ra màn hình mà không tạo xâu.
    Phần câu a thì mình làm được nhưng câu sau thì mù tịt, có bạn nào biết thì hướng dẫn mình với nhé. Thanks!

  7. #7
    Ngày gia nhập
    11 2007
    Bài viết
    153

    cái nè lên đưa ra topic mới bạn à dễ theo dõi hơn với các thành viên khác.

  8. #8
    Ngày gia nhập
    12 2007
    Bài viết
    25

    Ừ, để mình đưa thành Topic mới.

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

  1. Nhập và xuất danh sách liên kết lồng danh sách liên kết?
    Gửi bởi nvluong_it 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: 22-04-2011, 11:30 AM
  2. 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
  3. 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
  4. làm bài tập nhập và xuất danh sách liên kết .....help........
    Gửi bởi thaitutocxu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 06-05-2010, 09:23 AM
  5. nhập và xuất danh sách liên kết
    Gửi bởi thaitutocxu 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: 06-01-2010, 01:56 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