30/09/2018, 17:58

bái tập vận dụng liên kết đôi

mn có thề xem giúp chương trình này với nó cứ bị lỗ hàm hói thôi ak

#include <iostream>
#include <string>
#include <iomanip>
#include <malloc.h>
using namespace std;
#define TRUE 1;
#define FALSE 0;
typedef struct sinhvien
{
	int mssv;
	char hoten[12];
	float dtb;
}sinhvien;
// cau truc mot nut trong danh sach lien ket don
typedef struct node
{
  sinhvien info;
  struct node*next;
};
//khai bao kieu con tro chi den nut
typedef node *NODEPTR;
void initialize(NODEPTR*plist)//khoi tao danh sach lien ket
{
	*plist=NULL;
}
NODEPTR getnode(void)//cap phat bo nho cho 1node
{

	NODEPTR P;
	P=(NODEPTR) malloc(sizeof(struct node));
	return(P);
}
void Freenode(NODEPTR P)//xoa 1nut
{
    free(P);
}

int empty(NODEPTR*plist)//	kiem tra  ds co rong ko
{
	return (*plist==NULL? 1:0);


{

void traverse(NODEPTR *plist)//duyet ds
{
  NODEPTR p;
  int stt=0;
  p=*plist; //cho p tro nut dau
  if(empty(plist))
  {
   cout<<"danh sach rong"<<endl;
  }
  else
  {
	//di chuyen p di qua tung nut trong danh sach
   while(p!=NULL)
   {
     cout<<endl<<stt++<<setw(15)<<p->info.mssv<<setw(16)<<p->info.hoten<<setw(10)<<p->info.dtb;
	 p=p->next;

  }
  }
void push (NODEPTR *plist,sinhvien x)//them mot node vao ds
{
	NODEPTR p;
	p= getnode();
	p ->info=x;
	p ->next=*plist;
	*plist=p;
}
sinhvien pop(NODEPTR *plist)
{

	NODEPTR p;
	sinhvien x;
	p=*plist;
	*plist=p ->next;
	x=p ->info;
	freenode(p);

}
   int main()
{
    NODEPTR plist;
	NODEPTR P;
	sinhvien x;
	int chon=1;
    initialize(&plist);
     while(chon!=0)
	{

        cout<<" 
   thu muc chinh        "<<endl;
        cout<<" 1- xem danh sinh vien "<<endl;
        cout<<" 2- Them sinh vien vao danh sach"<<endl;
        cout<<" 3- xoa sinh vien "<<endl;
        cout<<" 4- hieu chinh sinh vien "<<endl;
        cout<<" 5- sp xep sinh vien theo MSSV"<<endl;
        cout<<" 6- tim kiem sinh vien theo MSSV"<<endl;
        cout<<" 7- them sinh vien vao danh sach theo ma so sinh vien"<<endl;
        cout<<"0. thoat"<<endl;
         cout<<"bam chon  "<<endl;
		 cin>>chon ;
		   if (chon==1)
		   {  
			   
			cout<<" danh sach sinh vien "<<endl;
			cout<<" 
STT        MSSV        HOVATEN         DIEM TB    "<<endl;
	         traverse(&plist);
			 
		   }
			   
           if(chon==2)
		   {   
			   cout<<"
nhap mssv: ";
			   cin>>(x.mssv);
			   cin.ignore();
			   cout<<"
nhap ho ten  ";
			   cin.getline(x.hoten,12);
			   cout<<"
nhap diem so  ";
			   cin>>x.dtb;
			   push(&plist, x);
			  
		   }
		   if(chon==3);
		   if(chon==4);
	       if(chon==6);
		   if(chon==7);
	
	 }	   }
Pham Anh viết 19:58 ngày 30/09/2018

Chỉnh sửa đưa vào thẻ code đi bạn,khó nhìn quá

Nhuyngo Nhuyngo95 viết 20:10 ngày 30/09/2018

@Su_Su minh ko biết đưa vào code nhưng mình chạy chương trình rồi nó cứ bị lỗi à

Nhuyngo Nhuyngo95 viết 20:06 ngày 30/09/2018

@funny_life_196 giúp với

Pham Anh viết 20:06 ngày 30/09/2018

Thứ nhất bạn kiểm tra mấy cái {}

Pham Anh viết 20:12 ngày 30/09/2018

Thứ 2 chỗ

  sinhvien pop(NODEPTR *plist)
    {
    
        NODEPTR p;
        sinhvien x;
        p=*plist;
        *plist=p ->next;
        x=p->info;
        freenode(p);
    
    }

Chỗ freenode§ bạn nhầm ,chữ Freenode viết hoa chữ F.he he
Thứ 3 ở mỗi biểu thức bạn nên có dấu cách cho code dễ đọc.
VD :

sinhvien pop(NODEPTR *plist)
        {
        
            NODEPTR p;
            sinhvien x;
            p =* plist;
            *plist = p ->next;
            x = p->info;
            freenode(p);
        
        }

Hết!!!

Nhuyngo Nhuyngo95 viết 20:08 ngày 30/09/2018

@Su_Su
mình kiểm tra đủ nhưng cứ báo lỗi là sao

Pham Anh viết 19:58 ngày 30/09/2018

int empty(NODEPTR*plist)// kiem tra ds co rong ko
{
return (*plist==NULL? 1:0);

{ // Chỗ này phải là }

Pham Anh viết 20:12 ngày 30/09/2018
void traverse(NODEPTR *plist)//duyet ds
{
  NODEPTR p;
  int stt=0;
  p=*plist; //cho p tro nut dau
  if(empty(plist))
  {
   cout<<"danh sach rong"<<endl;
  }
  else
  {
    //di chuyen p di qua tung nut trong danh sach
   while(p!=NULL)
   {
     cout<<endl<<stt++<<setw(15)<<p->info.mssv<<setw(16)<<p->info.hoten<<setw(10)<<p->info.dtb;
     p=p->next;

  }
  }
//Chỗ này thiếu 1 dấu }
Nhuyngo Nhuyngo95 viết 20:14 ngày 30/09/2018

xl hàm pop của bạn có báo lỗi không

lâm phúc tài viết 20:04 ngày 30/09/2018

bác nên coi lại mấy cái typedef thấy nó có j đó đó trong đó, bác typedef struct sinhvien xong lại tạo ngay 1 cái kiểu sinhvien, bác thử bỏ typedef xem coi như thế nào tại typedef chỉ là ảo thôi chứ nó chưa tồn tại đâu
vs lại typedef *node NODEPTR mới đúng bác. cái nào biến NODEPTR rồi thì ko truyền vào hàm con trỏ NODEPTR nữa
p/s: không khuyến khích sài typedef, đọc hơi bị rối, nhờ bác giải thích giúp cái typedef đầu bài

lâm phúc tài viết 20:08 ngày 30/09/2018
#include<iostream>
#include<math.h>
using namespace std;
struct dathuc
{
	int heso;
	int somu;
};
struct node
{
	dathuc info;
	struct node*next;
};
struct list
{
	node*head, *tail;
};
void chenthemnut (list&danhsach, node*nutdau);
node*taonut (dathuc nut);
void nhap_da_thuc(list&danhsach);
void xuat_da_thuc(list danhsach);
float tinh_gia_tri(list danhsach);
int main()
{
	list danhsach;
	nhap_da_thuc(danhsach);
	xuat_da_thuc(danhsach);
	cout<<"f(x)= "<<tinh_gia_tri(danhsach)<<endl;
	system("pause");
}
void chenthemnut (list&danhsach, node*nutdau)
{
	if(danhsach.head==NULL)
	{
		danhsach.head = nutdau;
		danhsach.tail = nutdau;
	}
	else
	{
		danhsach.tail->next=nutdau;
		danhsach.tail = nutdau;
	}
}
node*taonut (dathuc nut)
{
	node*pnut=new node;
	if(pnut==NULL)
	{
		cout<<"Khong du bo nho.";
		exit(1);
	}
	pnut->info=nut;
	pnut->next=NULL;
	return pnut;
}
void nhap_da_thuc(list&danhsach)
{
	int n;
	cout<<"Nhap vao cac so hang n: ";
	cin>>n;
	dathuc nut;
	for (int i=1; i<=n;i++)
	{
		do
		{
			cout<<"Nhap vao he so thu "<<i<<" :";
			cin>>nut.heso;
			cout<<"Nhap vao so mu cua "<<i<<" :";
			cin>>nut.somu;
		}
		while(nut.heso==0||nut.somu<0);
		chenthemnut(danhsach, taonut(nut));
	}
}
void xuat_da_thuc (list danhsach)
{
	cout<<"f(x)= ";
	node*pt=danhsach.head;
	while(pt!=NULL)
	{
		cout<<pt->info.heso<<"x^"<<pt->info.somu<<"+";
		pt=pt->next;
	}
	cout<<pt->info.heso<<"x^"<<pt->info.somu<<"."<<endl;
}
float tinh_gia_tri(list danhsach)
{
	node *pt = danhsach.head;
	float x,f=0;
	cout<<"Nhap vao gia tri cua x: ";
	cin>>x;
	while(pt!=NULL)
	{
		f += pt->info.heso * pow(x,pt->info.somu);
		pt=pt->next;
	}
	return f;
}

Đây là bài tính đa thức trên danh sách liên kết đơn của mìn từng làm, không sài typedef tuy cũng có khó hiểu nhưng chắc ko khó đọc phần list đâu *ko biết cho vào code sao đây

Pham Anh viết 20:11 ngày 30/09/2018

Hàm pop lỗi chỗ freenode§ thành Freenode§ mà,m nói rồi mà.Với cả cái này là LK đơn mà

Nhuyngo Nhuyngo95 viết 20:13 ngày 30/09/2018

@ninedog cái

 typedef struct sinhvien
{
	int mssv;
	char hoten[12];
	float dtb;
}sinhvien;

cái này chẳng để định dạng các biến trong chương trình thui à

Nhuyngo Nhuyngo95 viết 20:00 ngày 30/09/2018

chỉnh được rùi ,cảm ơn@Su_Su nhiều nha

Bài liên quan
0