Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 26 kết quả

Đề tài: [BT][Khác]Danh sách liên kết đơn

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

    Mặc định [BT][Khác]Danh sách liên kết đơn

    Mình làm bài tập về dslk đơn, mới thử thêm node đầu và cuối (bài có tham khảo một phần của bạn popopo..), nó báo lỗi "Access Violent" gì đó mà mình ko biết phải sửa như thế nào. Mong mọi người text và sửa dùm mình bài này!
    Code:
    #include "stdio.h"
    #include "stdlib.h"
    #include "conio.h"
    #include "string.h"
    #include "dos.h"
    typedef struct sinhvien
    {
    	char hoten[25];
    	
    	int mssv;
    }sv;
    typedef struct tagnode
    {
    	sv info;
    	struct tagnode* pnext;
    }node;
    typedef struct taglist
    {
    	node* phead;
    	node* ptail;
    }list;
    node* GetNode(sv x)
    {
    	node *p;
    	p=new node;
    	if(p=NULL) 
    	{
    		printf("khong du vung nho");
    		exit(1);
    	}
    	p->info=x;
    	p->pnext=NULL;
    	return p;
    }
    //==========Them 1 node vao dau danh sach==========//
    node* InsertHead(node *phead,node *ptail,sv x)
    {
    	node* new_ele=GetNode(x);
    	if(new_ele=NULL) return NULL;
    	if(phead=NULL)
    	{
    		phead=new_ele; ptail=phead;
    	}
    	else
    	{
    		new_ele->pnext=phead;
    		phead=new_ele;
    	}
    	return new_ele;
    }
    //==========Them 1 node vao cuoi danh sach==========//
    node* InsertTail(node *phead,node *ptail,sv x)
    {
    	node* new_ele=GetNode(x);
    	if(new_ele=NULL) return NULL;
    	if(phead=NULL)
    	{
    		phead=new_ele; ptail=phead;
    	}
    	else
    	{
    		ptail->pnext=new_ele;
    		ptail=new_ele;
    	}
    	return new_ele;
    }
    void Thuchien(void)
    {
    	sv x; char c;int n;char tam[10];
    	node *phead; node *ptail;
    	 do {
    		printf("\n THAO TAC VOI SINGLE LINK LIST");
    		printf("\n 1- Them node dau danh sach");
    		printf("\n 2- Them node cuoi danh sach");
    		printf("\n 0- Tro ve");
    		c=getch();
    		switch(c)
    		{
    			case '1':
    				printf("\n Ho va ten:");gets(x.hoten);
    				printf("\n Ma sinh vien:");gets(tam);x.mssv=atoi(tam);
    				 InsertHead(phead,ptail,x); break;
    			case '2':
    				printf("\n Ma sinh vien:");gets(tam);x.mssv=atoi(tam);
    				 printf("\n Ho va ten:");gets(x.hoten);
    				InsertTail(phead,ptail,x); break;
    		}
    	} while(c!='0');
    }
    void main(void)
    {
    
    	Thuchien();
    }

  2. #2

    1. Toán tử điều kiện sai : if ( A = B ) <> if ( A == B )
    2. Chưa thấy List được dùng
    3. gets(tam) -> lấy hết các kí tự input kể cả return
    4. nếu tam không phải số mà chứa thêm kí tự đặc biệt thì convert atoi(xxx) trả về NULL
    5. Không khuyến khích gán trực tiếp cấu trúc : gets(x.tên) -> không nên.
    6. Thư viện header chú ý : nếu cùng thư mục thì "headerfile.h" nếu khác thư mục thì <headerfile.h>
    7. Vẫn còn lỗi bạn tự tìm sau khi sửa mấy cái ở trên là ra ngay.
    [CENTER][B][U][FONT="Courier New"][COLOR="Green"]Học Tin như Gà học tắm nước sôi ...(:=(|)[/COLOR][/FONT][/U][/B][/CENTER]

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

    cảm ơn bạn nha! Để mình sửa thử xem nó chạy có được ko
    Mới đầu mình tính xài cái list, nhưng khi vào hàm main mình ko biết phải khai báo như thế nào nên mình mình làm kiểu khác. Nếu bạn biết thì chỉ mình với. Đa tạ

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

    Đây là bài sau khi mình sửa những lỗi ở trên nhưng chạy nửa chừng thì nó báo lỗi "access violation" chỗ p->info=x trong ham GetNode. Các bạn test thử rồi giúp mình sửa với
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
    #include <dos.h>
    typedef struct sinhvien
    {
    	char hoten[25];
    	int mssv;
    }sv;
    typedef struct tagnode
    {
    	sv info;
    	struct tagnode* pnext;
    }node;
    node* GetNode(sv x)
    {
    	node *p;
    	p=new node;
    	if(p=NULL) 
    	{
    		printf("khong du vung nho");
    		exit(1);
    	}
    	p->info=x;
    	p->pnext=NULL;
    	return p;
    }
    //==========Them 1 node vao dau danh sach==========//
    node* InsertHead(node *phead,node *ptail,sv x)
    {
    	node* new_ele=GetNode(x);
    	if(new_ele==NULL) return NULL;
    	if(phead==NULL)
    	{
    		phead=new_ele; ptail=phead;
    	}
    	else
    	{
    		new_ele->pnext=phead;
    		phead=new_ele;
    	}
    	return new_ele;
    }
    //==========Them 1 node vao cuoi danh sach==========//
    node* InsertTail(node *phead,node *ptail,sv x)
    {
    	node* new_ele=GetNode(x);
    	if(new_ele==NULL) return NULL;
    	if(phead==NULL)
    	{
    		phead=new_ele; ptail=phead;
    	}
    	else
    	{
    		ptail->pnext=new_ele;
    		ptail=new_ele;
    	}
    	return new_ele;
    }
    void Thuchien(void)
    {
    	sv x; char c;
    	node *phead,*ptail;
    	 do {
    		printf("\n THAO TAC VOI SINGLE LINK LIST");
    		printf("\n 1- Them node dau danh sach");
    		printf("\n 2- Them node cuoi danh sach");
    		printf("\n 0- Tro ve");
    		c=getch();
    		switch(c)
    		{
    			case '1':
    				printf("\n Ho va ten:");scanf("%s",x.hoten);
    				printf("\n Ma sinh vien:");scanf("%d",x.mssv);
    				InsertHead(phead,ptail,x); break;
    		
    			case '2':
    				printf("\n Ma sinh vien:");scanf("%s",x.hoten);
    				printf("\n Ho va ten:");scanf("%d",x.mssv);
    				InsertTail(phead,ptail,x); break;
    		}
    	} while(c!='0');
    }
    void main(void)
    {
    
    	Thuchien();
    }

  5. #5
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Cậu bị dính lỗi thường gặp rồi, gõ sót 1 dấu = : if (p=NULL).
    Khi app chạy, nó sẽ gán NULL vào p, và bt (p = NULL) trả về 0 nên block trong if này không thực thi, app nhảy tới: p->info = x, app crash tại đây.
    Nên tập thói quen viết ngược lại, vd: NULL == p, 3 == func(x), FALSE == t.... Nó sẽ mang lại nhiều điều lợi cho cậu.

  6. #6
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    Mặc định [BT][Khác]Danh sách liên kết đơn

    Trích dẫn Nguyên bản được gửi bởi TQN Xem bài viết
    Cậu bị dính lỗi thường gặp rồi, gõ sót 1 dấu = : if (p=NULL).
    he he, lỗi thường gặp, trình dịch VC sẽ cho 1 warning ở level 3, mà không có 1 lỗi nào được báo

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

    Sao kì vầy nè, mình đã thêm dấu "=" rùi mà nó chạy vẫn bị lỗi, ko hiểu tại sao nữa. Các bạn có thể giúp mình sửa rùi test giúp luôn nha.
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
    #include <dos.h>
    typedef struct sinhvien
    {
    	char hoten[25];
    	int mssv;
    }sv;
    typedef struct tagnode
    {
    	sv info;
    	struct tagnode* pnext;
    }node;
    typedef struct taglist
    {
    	node *phead;
    	node *ptail;
    }list;
    
    node* GetNode(sv x)
    {
    	node *p;
    	p=new node;
    	if(NULL==p) 
    	{
    		printf("khong du vung nho");
    		exit(1);
    	}
    	p->info=x;
    	p->pnext=NULL;
    	return p;
    }
    //==========Them 1 node vao dau danh sach==========//
    node* InsertHead(list &l,sv x)
    {
    	node* new_ele=GetNode(x);
    	if(NULL==new_ele) return NULL;
    	if(NULL==l.phead)
    	{
    		l.phead=new_ele; l.ptail=l.phead;
    	}
    	else
    	{
    		new_ele->pnext=l.phead;
    		l.phead=new_ele;
    	}
    	return new_ele;
    }
    //==========Them 1 node vao cuoi danh sach==========//
    node* InsertTail(list &l,sv x)
    {
    	node* new_ele=GetNode(x);
    	if(NULL==new_ele) return NULL;
    	if(NULL==l.phead)
    	{
    		l.phead=new_ele; l.ptail=l.phead;
    	}
    	else
    	{
    		l.ptail->pnext=new_ele;
    		l.ptail=new_ele;
    	}
    	return new_ele;
    }
    void Thuchien(void)
    {
    	sv x; char c; list l;
    	 do {
    		printf("\n THAO TAC VOI SINGLE LINK LIST");
    		printf("\n 1- Them node dau danh sach");
    		printf("\n 2- Them node cuoi danh sach");
    		printf("\n 0- Tro ve");
    		c=getch();
    		switch(c)
    		{
    			case '1':
    				printf("\n Ho va ten:");scanf("%s",x.hoten);
    				printf("\n Ma sinh vien:");scanf("%d",x.mssv);
    				InsertHead(l,x); break;
    		
    			case '2':
    				printf("\n Ho va ten:");scanf("%s",x.hoten);
    				printf("\n Ma sinh vien:");scanf("%d",x.mssv);
    				InsertTail(l,x); break;
    		}
    	} while(c!='0');
    }
    void main(void)
    {
    
    	Thuchien();
    }

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

    Mặc định sao ko ai giúp mình vậy nè

    sao ko ai giúp mình vậy nè

  9. #9
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Cậu bị một lỗi nữa, dùng hàm scanf bị sai đấy, debug cho ra đi.

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

    -Bạn chưa khởi động danh sách liên kết ,đừng nên xử lý nhiều trong các hàm con ,làm vậy người ta sẽ khó kiểm tra trình tự thực hiện,trong khi đó hàm main thì trống lốc .
    Đã được chỉnh sửa lần cuối bởi SegoGs : 11-06-2007 lúc 05:15 PM.
    ----------Kiến thức qua đi chỉ có bằng cấp ở lại----------

    Hỏng chuột , hư bàn phím ,game bằng niềm tin

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

  1. Hướng dẫn Biểu diễn thích hợp bằng danh sách liên kết đơn hoặc danh sách liên kết kép
    Gửi bởi maitrung trong diễn đàn Thủ thuật, Tutorials CTDL & Giải thuật
    Trả lời: 3
    Bài viết cuối: 04-08-2012, 08:01 PM
  2. Cấu trúc dữ liệu Cách tạo danh sách liên kết mới từ danh sách liên kết đã cho như thế nào?
    Gửi bởi giacmo1612 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 2
    Bài viết cuối: 30-11-2011, 04:43 PM
  3. 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
  4. Lập trình C Danh sách liên kết - Xử lý danh sách liên kết trong lập trình C
    Gửi bởi phucduan 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: 08-11-2010, 10:25 PM
  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