Announcement

Collapse
No announcement yet.

Xuất danh sách liên kết kép

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Ansi C] Xuất danh sách liên kết kép

    Code:
    #include "stdafx.h"
    #include "string.h"
    
    struct date
    {
           int ngay;
           int thang;
           int nam;       
    }ngaysinh;
    typedef struct sv
    {
    	char mssv[10];
    	char hoten[50];
    	struct date ngaysinh;
    	int diemtoana1;
    	int diemlya1;
    	int diem********;
    	float diemTB;
    }sv;
    typedef struct tagdnode
    {
    	sv info;
    	struct tagdnode*pnext;
    	struct tagdnode*pprev;
    }dnodesv;
    typedef struct tagdlist
    {
    	dnodesv*phead;
    	dnodesv*ptail;
    }dlistsv;
    void createlist(dlistsv &l)
    {
    	l.phead=l.ptail=NULL;
    }
    dnodesv *creatednodesv()
    {
    	dnodesv *p;
    	sv t;
    	p=new dnodesv;
    	if(p==NULL)
    		return NULL;
    	else
    	{
    		printf("\nnhap MSSV: ");
    		fflush(stdin);
    		gets_s(t.mssv);
    		strcpy_s(p->info.mssv,t.mssv);
    		printf("nhap ten sinh vien: ");
    		fflush(stdin);
    		gets_s(t.hoten);
    		strcpy_s(p->info.hoten,t.hoten);
    		printf("ngay sinh(dd/mm/yyyy): ");
    		scanf_s("%d %d %d",&t.ngaysinh.ngay,&t.ngaysinh.thang,&t.ngaysinh.nam);
    		p->info.ngaysinh.ngay=t.ngaysinh.ngay;
    		p->info.ngaysinh.thang=t.ngaysinh.thang;
    		p->info.ngaysinh.nam=t.ngaysinh.nam;
    		printf("nhap diem toan A1: ");
    		scanf_s("%d",&t.diemtoana1);
    		p->info.diemtoana1=t.diemtoana1;
    		printf("nhap diem ly A1: ");
    		scanf_s("%d",&t.diemlya1);
    		p->info.diemlya1=t.diemlya1;
    		printf("nhap diem ngoai ngu: ");
    		scanf_s("%d",&t.diem********);
    		p->info.diem********=t.diem********;
    		p->info.diemTB=float(((t.diemtoana1+t.diemlya1+t.diem********)/3.0));
    		p->pnext=NULL;
    		p->pprev=NULL;
    		return p;
    	}
    }
    void addend(dlistsv &l,dnodesv *p)
    {
    	if(l.phead==NULL)
    		l.phead=l.ptail=p;
    	else
    	{
    		p->pprev=l.ptail;
    		l.ptail->pnext=p;
    		p=l.ptail;
    	}
    }
    void nhapsv(dlistsv &l)
    {
         int n,i;
         dnodesv *p;
    	 p=l.phead;
         printf("so sinh vien can nhap: ");
         scanf_s("%d",&n);
         for(i=0;i<n;i++)
         {
             printf("\nsinh vien thu %d",i+1);
    		 addend(l,creatednodesv());        
         }     
    }
    void inds(dlistsv l)
    {
         dnodesv *p;
    	 p=l.phead;
         printf("\n+---------------------+-------------------+");
         printf("\n|TEN SINH VIEN        |   NGAY SINH       |");
         printf("\n+---------------------+-------------------+");
         while(p!=NULL)
         {
          printf("\n|%-20s |   %-2d/%-2d/%-4d      |",p->info.hoten,p->info.ngaysinh.ngay,p->info.ngaysinh.thang,p->info.ngaysinh.nam);
    	  printf("\n+----------------+---------------+----------------+---------------+");
    	  printf("\n|  DIEM TOAN A1  |   DIEM LY A1  | DIEM NGOAI NGU |   DIEM LY TB  |");
          printf("\n+----------------+---------------+----------------+---------------+");
    	  printf("\n|       %2d             %2d               %2d               %2.2f     |",p->info.diemtoana1,p->info.diemlya1,p->info.diem********,p->info.diemTB);
    	  printf("\n+----------------+---------------+----------------+---------------+");
          p=p->pnext;         
         } 
    }
    void main()
    {
    	dlistsv l;
    	createlist(l);
    	nhapsv(l);
    	inds(l);
    }
    mấy huynh xem giúp! sao em nhập từ 2 sinh viên trở đi chỉ in ra có sinh viên đầu và sinh viên cuối, xem giúp em làm sai chỗ nào? thanks các huynh nhiều :salute:

  • #2
    Bạn xem lại cái hàm này nhé !
    void addend(dlistsv &l,dnodesv *p)
    {
    if(l.phead==NULL)
    l.phead=l.ptail=p;
    else
    {
    p->pprev=l.ptail;
    l.ptail->pnext=p;
    p=l.ptail;//chổ này bạn gán lại l.ptail=p nhé !,rùi chạy thử xem đúng chưa,mình đoán là do chổ này
    }
    }
    Originally posted by 12520782 View Post
    Code:
    #include "stdafx.h"
    #include "string.h"
    
    struct date
    {
           int ngay;
           int thang;
           int nam;       
    }ngaysinh;
    typedef struct sv
    {
    	char mssv[10];
    	char hoten[50];
    	struct date ngaysinh;
    	int diemtoana1;
    	int diemlya1;
    	int diem********;
    	float diemTB;
    }sv;
    typedef struct tagdnode
    {
    	sv info;
    	struct tagdnode*pnext;
    	struct tagdnode*pprev;
    }dnodesv;
    typedef struct tagdlist
    {
    	dnodesv*phead;
    	dnodesv*ptail;
    }dlistsv;
    void createlist(dlistsv &l)
    {
    	l.phead=l.ptail=NULL;
    }
    dnodesv *creatednodesv()
    {
    	dnodesv *p;
    	sv t;
    	p=new dnodesv;
    	if(p==NULL)
    		return NULL;
    	else
    	{
    		printf("\nnhap MSSV: ");
    		fflush(stdin);
    		gets_s(t.mssv);
    		strcpy_s(p->info.mssv,t.mssv);
    		printf("nhap ten sinh vien: ");
    		fflush(stdin);
    		gets_s(t.hoten);
    		strcpy_s(p->info.hoten,t.hoten);
    		printf("ngay sinh(dd/mm/yyyy): ");
    		scanf_s("%d %d %d",&t.ngaysinh.ngay,&t.ngaysinh.thang,&t.ngaysinh.nam);
    		p->info.ngaysinh.ngay=t.ngaysinh.ngay;
    		p->info.ngaysinh.thang=t.ngaysinh.thang;
    		p->info.ngaysinh.nam=t.ngaysinh.nam;
    		printf("nhap diem toan A1: ");
    		scanf_s("%d",&t.diemtoana1);
    		p->info.diemtoana1=t.diemtoana1;
    		printf("nhap diem ly A1: ");
    		scanf_s("%d",&t.diemlya1);
    		p->info.diemlya1=t.diemlya1;
    		printf("nhap diem ngoai ngu: ");
    		scanf_s("%d",&t.diem********);
    		p->info.diem********=t.diem********;
    		p->info.diemTB=float(((t.diemtoana1+t.diemlya1+t.diem********)/3.0));
    		p->pnext=NULL;
    		p->pprev=NULL;
    		return p;
    	}
    }
    void addend(dlistsv &l,dnodesv *p)
    {
    	if(l.phead==NULL)
    		l.phead=l.ptail=p;
    	else
    	{
    		p->pprev=l.ptail;
    		l.ptail->pnext=p;
    		p=l.ptail;
    	}
    }
    void nhapsv(dlistsv &l)
    {
         int n,i;
         dnodesv *p;
    	 p=l.phead;
         printf("so sinh vien can nhap: ");
         scanf_s("%d",&n);
         for(i=0;i<n;i++)
         {
             printf("\nsinh vien thu %d",i+1);
    		 addend(l,creatednodesv());        
         }     
    }
    void inds(dlistsv l)
    {
         dnodesv *p;
    	 p=l.phead;
         printf("\n+---------------------+-------------------+");
         printf("\n|TEN SINH VIEN        |   NGAY SINH       |");
         printf("\n+---------------------+-------------------+");
         while(p!=NULL)
         {
          printf("\n|%-20s |   %-2d/%-2d/%-4d      |",p->info.hoten,p->info.ngaysinh.ngay,p->info.ngaysinh.thang,p->info.ngaysinh.nam);
    	  printf("\n+----------------+---------------+----------------+---------------+");
    	  printf("\n|  DIEM TOAN A1  |   DIEM LY A1  | DIEM NGOAI NGU |   DIEM LY TB  |");
          printf("\n+----------------+---------------+----------------+---------------+");
    	  printf("\n|       %2d             %2d               %2d               %2.2f     |",p->info.diemtoana1,p->info.diemlya1,p->info.diem********,p->info.diemTB);
    	  printf("\n+----------------+---------------+----------------+---------------+");
          p=p->pnext;         
         } 
    }
    void main()
    {
    	dlistsv l;
    	createlist(l);
    	nhapsv(l);
    	inds(l);
    }
    mấy huynh xem giúp! sao em nhập từ 2 sinh viên trở đi chỉ in ra có sinh viên đầu và sinh viên cuối, xem giúp em làm sai chỗ nào? thanks các huynh nhiều :salute:
    Hà Tĩnh Quê Choa:sunglasses:
    FACEBOOK

    Comment


    • #3
      em sửa lại và chạy được rồi, nhưng làm tiếp tới cái hàm search nó bị sai tiếp, chạy kết quả nào nó cũng báo là tìm được sinh viên trong danh sách. Dưới đây là code em vừa làm thêm anh [MENTION=11778]11520268[/MENTION] sửa giúp em:
      PHP Code:
      #include "stdafx.h"
      #include "string.h"
      #include "stdlib.h"
      struct date
      {
             
      int ngay;
             
      int thang;
             
      int nam;       
      }
      ngaysinh;
      typedef struct sv
      {
          
      char mssv[10];
          
      char hoten[50];
          
      struct date ngaysinh;
          
      int diemtoana1;
          
      int diemlya1;
          
      int diem********;
          
      float diemTB;
      }
      sv;
      typedef struct tagdnode
      {
          
      sv info;
          
      struct tagdnode*pnext;
          
      struct tagdnode*pprev;
      }
      dnodesv;
      typedef struct tagdlist
      {
          
      dnodesv*phead;
          
      dnodesv*ptail;
      }
      dlistsv;
      void createlist(dlistsv &l)
      {
          
      l.phead=l.ptail=NULL;
      }
      dnodesv *creatednodesv()
      {
          
      dnodesv *p;
          
      sv t;
          
      p=new dnodesv;
          if(
      p==NULL)
              return 
      NULL;
          else
          {
              
      printf("\nnhap MSSV: ");
              
      fflush(stdin);
              
      gets_s(t.mssv);
              
      strcpy_s(p->info.mssv,t.mssv);
              
      printf("nhap ten sinh vien: ");
              
      fflush(stdin);
              
      gets_s(t.hoten);
              
      strcpy_s(p->info.hoten,t.hoten);
              
      printf("ngay sinh(dd/mm/yyyy): ");
              
      scanf_s("%d %d %d",&t.ngaysinh.ngay,&t.ngaysinh.thang,&t.ngaysinh.nam);
              
      p->info.ngaysinh.ngay=t.ngaysinh.ngay;
              
      p->info.ngaysinh.thang=t.ngaysinh.thang;
              
      p->info.ngaysinh.nam=t.ngaysinh.nam;
              
      printf("nhap diem toan A1: ");
              
      scanf_s("%d",&t.diemtoana1);
              
      p->info.diemtoana1=t.diemtoana1;
              
      printf("nhap diem ly A1: ");
              
      scanf_s("%d",&t.diemlya1);
              
      p->info.diemlya1=t.diemlya1;
              
      printf("nhap diem ngoai ngu: ");
              
      scanf_s("%d",&t.diem********);
              
      p->info.diem********=t.diem********;
              
      p->info.diemTB=float(((t.diemtoana1+t.diemlya1+t.diem********)/3.0));
              
      p->pnext=NULL;
              
      p->pprev=NULL;
              return 
      p;
          }
      }
      void addend(dlistsv &l,dnodesv *p)
      {
          if(
      l.phead==NULL)
              
      l.phead=l.ptail=p;
          else
          {
              
      p->pprev=l.ptail;
              
      l.ptail->pnext=p;
              
      l.ptail=p;
          }
      }
      void nhapsv(dlistsv &l)
      {
           
      int n,i;
           
      dnodesv *p;
           
      p=l.phead;
           
      printf("so sinh vien can nhap: ");
           
      scanf_s("%d",&n);
           for(
      i=0;i<n;i++)
           {
               
      printf("\nsinh vien thu %d",i+1);
               
      addend(l,creatednodesv()); 
           }
      }
      void output(dlistsv l)
      {
          
      dnodesv *p;
          
      p=l.phead;

          while(
      p!=NULL)
          {
              
      printf("\n+---------------------+-----------------------+-----------------------+");
              
      printf("\n|    MA SO SINH VIEN  |    TEN SINH VIEN      |      NGAY SINH        |");
              
      printf("\n+---------------------+-----------------------+-----------------------+");
              
      printf("\n %-20s | %-20s  |  %-2d/%-2d/%-4d      ",p->info.mssv,p->info.hoten,p->info.ngaysinh.ngay,p->info.ngaysinh.thang,p->info.ngaysinh.nam);
              
      printf("\n+-----------------+----------------+------------------+---------------+");
              
      printf("\n|  DIEM TOAN A1   |   DIEM LY A1   |  DIEM NGOAI NGU  |   DIEM LY TB  |");
              
      printf("\n+-----------------+----------------+------------------+---------------+");
              
      printf("\n       %2d               %2d                 %2d              %2.2f  ",p->info.diemtoana1,p->info.diemlya1,p->info.diem********,p->info.diemTB);
              
      printf("\n+-----------------+----------------+------------------+---------------+"); 
              
      p=p->pnext;
          } 
      }
      dnodesv *search(dlistsv &l,char x[])
      {
          
      dnodesv *p;
          
      p=l.phead;
          while((
      p->info.mssv)!=&& p->pnext!=NULL)
          {
              
      p=p->pnext;
          }
          return 
      p;
      }
      void deletefirst(dlistsv &l)
      {    
          
      dnodesv *p;
          if(
      l.phead!=NULL)
          {
              
      p=l.phead;
              
      l.phead=l.phead->pnext;
              
      l.phead->pprev=NULL;
              
      delete p;
              if(
      l.phead==NULL)
                  
      l.ptail=NULL;
          }
      }
      void deleteend(dlistsv &l)
      {
          
      dnodesv *p;
          if(
      l.phead!=NULL)
          {
              
      p=l.ptail;
              
      l.ptail=l.ptail->pprev;
              
      l.ptail->pnext=NULL;
              
      delete p;
              if(
      l.ptail=NULL)
                  
      l.phead=NULL;
          }
      }
      void deletemid(dlistsv &l)
      {
          
      dnodesv *p;
          
      p->pprev->pnext=p->pnext;
          
      p->pnext->pprev p->pprev;
          
      delete p;
      }
      void main()
      {
          
      char x[10];
          
      int s=0;
          
      dnodesv *p;
          
      dlistsv l;
          
      createlist(l);
          
      nhapsv(l);
          
      output(l);
          
      p=l.phead;
          while(
      p)
          {
              if((
      p->info.diemTB)>7.0 || (p->info.diemTB)==7.0)
                  
      s++;
              
      p=p->pnext;
          }
          
      printf("tong so sinh vien co diem trung binh >=7 la: %d",s);
          
      deletefirst(l);
          
      deleteend(l);
          
      output(l);
          
      printf("\n");
          
      printf("nhap MSSV can tim: ");
          
      fflush(stdin);
          
      gets_s(x);
          while(
      strlen(x)<|| strlen(x)>10);
          if(
      search(l,x)==NULL)
              
      printf("khong co sinh vien trong danh sach");
          else
              
      printf("co sinh vien trong danh sach");

      :unhappy:

      Comment


      • #4
        dnodesv *search(dlistsv &l,char x[])
        {
        dnodesv *p;
        p=l.phead;
        while((p->info.mssv)!=x && p->pnext!=NULL)
        {
        p=p->pnext;
        }
        return p;
        }
        Đầu tiên là nếu muốn so sánh chuỗi thì nên dùng strcmp chứ ko nên dùng phép != . Có thể chương trình sẽ chạy ko tốt ở chỗ này...
        Thứ hai là hàm tìm này sẽ ko bao giờ trả về null ( ko tìm thấy ) được. Giả sử giá trị cần tìm có thì ok nhưng nếu ko có , vòng lặp chạy tới node cuối cùng thì cần xem lại.Vì ở cái node cuối cùng khi p.info ko bằng x ( đúng ) nhưng p->pnext!=null là sai nên vòng lặp sẽ thóat và câu lênh p=p->pnext (để cho p= null) sẽ ko được thực hiện.

        Chào người wen ^^.

        Comment


        • #5
          Originally posted by 12520478 View Post
          Đầu tiên là nếu muốn so sánh chuỗi thì nên dùng strcmp chứ ko nên dùng phép != . Có thể chương trình sẽ chạy ko tốt ở chỗ này...
          Thứ hai là hàm tìm này sẽ ko bao giờ trả về null ( ko tìm thấy ) được. Giả sử giá trị cần tìm có thì ok nhưng nếu ko có , vòng lặp chạy tới node cuối cùng thì cần xem lại.Vì ở cái node cuối cùng khi p.info ko bằng x ( đúng ) nhưng p->pnext!=null là sai nên vòng lặp sẽ thóat và câu lênh p=p->pnext (để cho p= null) sẽ ko được thực hiện.

          Chào người wen ^^.
          uhm mà tui cũng có dùng thử strcmp rồi mà chạy cũng vẫn như thế :sad:

          Comment


          • #6
            Ông đọc cái thứ 2 của tui ah ^^

            Comment


            • #7
              Nó báo lúc nào cũng tìm được sinh viên là do,lúc return p về p nó luôn có giá trị,và giá trị ở đây là thằng giá trị của l.tail nếu như duyệt trong danh sách ko có phần tử nào thỏa đk
              dnodesv *search(dlistsv &l,char x[])
              {
              dnodesv *p;
              p=l.phead;
              while((p->info.mssv)!=x && p->pnext!=NULL)
              {
              p=p->pnext;
              }
              return p;
              }
              bạn thử thay hàm này xem chạy được ko nhé !
              int search(dlistsv &l,char x[])
              {
              dnodesv *p;
              p=l.phead;
              while(p)
              {
              if(strcmp(p->info.mssv,x)==0)
              return 1;
              p=p->next;
              }
              return 0;
              }
              Originally posted by 12520782 View Post
              em sửa lại và chạy được rồi, nhưng làm tiếp tới cái hàm search nó bị sai tiếp, chạy kết quả nào nó cũng báo là tìm được sinh viên trong danh sách. Dưới đây là code em vừa làm thêm anh [MENTION=11778]11520268[/MENTION] sửa giúp em:
              PHP Code:
              #include "stdafx.h"
              #include "string.h"
              #include "stdlib.h"
              struct date
              {
                     
              int ngay;
                     
              int thang;
                     
              int nam;       
              }
              ngaysinh;
              typedef struct sv
              {
                  
              char mssv[10];
                  
              char hoten[50];
                  
              struct date ngaysinh;
                  
              int diemtoana1;
                  
              int diemlya1;
                  
              int diem********;
                  
              float diemTB;
              }
              sv;
              typedef struct tagdnode
              {
                  
              sv info;
                  
              struct tagdnode*pnext;
                  
              struct tagdnode*pprev;
              }
              dnodesv;
              typedef struct tagdlist
              {
                  
              dnodesv*phead;
                  
              dnodesv*ptail;
              }
              dlistsv;
              void createlist(dlistsv &l)
              {
                  
              l.phead=l.ptail=NULL;
              }
              dnodesv *creatednodesv()
              {
                  
              dnodesv *p;
                  
              sv t;
                  
              p=new dnodesv;
                  if(
              p==NULL)
                      return 
              NULL;
                  else
                  {
                      
              printf("\nnhap MSSV: ");
                      
              fflush(stdin);
                      
              gets_s(t.mssv);
                      
              strcpy_s(p->info.mssv,t.mssv);
                      
              printf("nhap ten sinh vien: ");
                      
              fflush(stdin);
                      
              gets_s(t.hoten);
                      
              strcpy_s(p->info.hoten,t.hoten);
                      
              printf("ngay sinh(dd/mm/yyyy): ");
                      
              scanf_s("%d %d %d",&t.ngaysinh.ngay,&t.ngaysinh.thang,&t.ngaysinh.nam);
                      
              p->info.ngaysinh.ngay=t.ngaysinh.ngay;
                      
              p->info.ngaysinh.thang=t.ngaysinh.thang;
                      
              p->info.ngaysinh.nam=t.ngaysinh.nam;
                      
              printf("nhap diem toan A1: ");
                      
              scanf_s("%d",&t.diemtoana1);
                      
              p->info.diemtoana1=t.diemtoana1;
                      
              printf("nhap diem ly A1: ");
                      
              scanf_s("%d",&t.diemlya1);
                      
              p->info.diemlya1=t.diemlya1;
                      
              printf("nhap diem ngoai ngu: ");
                      
              scanf_s("%d",&t.diem********);
                      
              p->info.diem********=t.diem********;
                      
              p->info.diemTB=float(((t.diemtoana1+t.diemlya1+t.diem********)/3.0));
                      
              p->pnext=NULL;
                      
              p->pprev=NULL;
                      return 
              p;
                  }
              }
              void addend(dlistsv &l,dnodesv *p)
              {
                  if(
              l.phead==NULL)
                      
              l.phead=l.ptail=p;
                  else
                  {
                      
              p->pprev=l.ptail;
                      
              l.ptail->pnext=p;
                      
              l.ptail=p;
                  }
              }
              void nhapsv(dlistsv &l)
              {
                   
              int n,i;
                   
              dnodesv *p;
                   
              p=l.phead;
                   
              printf("so sinh vien can nhap: ");
                   
              scanf_s("%d",&n);
                   for(
              i=0;i<n;i++)
                   {
                       
              printf("\nsinh vien thu %d",i+1);
                       
              addend(l,creatednodesv()); 
                   }
              }
              void output(dlistsv l)
              {
                  
              dnodesv *p;
                  
              p=l.phead;

                  while(
              p!=NULL)
                  {
                      
              printf("\n+---------------------+-----------------------+-----------------------+");
                      
              printf("\n|    MA SO SINH VIEN  |    TEN SINH VIEN      |      NGAY SINH        |");
                      
              printf("\n+---------------------+-----------------------+-----------------------+");
                      
              printf("\n %-20s | %-20s  |  %-2d/%-2d/%-4d      ",p->info.mssv,p->info.hoten,p->info.ngaysinh.ngay,p->info.ngaysinh.thang,p->info.ngaysinh.nam);
                      
              printf("\n+-----------------+----------------+------------------+---------------+");
                      
              printf("\n|  DIEM TOAN A1   |   DIEM LY A1   |  DIEM NGOAI NGU  |   DIEM LY TB  |");
                      
              printf("\n+-----------------+----------------+------------------+---------------+");
                      
              printf("\n       %2d               %2d                 %2d              %2.2f  ",p->info.diemtoana1,p->info.diemlya1,p->info.diem********,p->info.diemTB);
                      
              printf("\n+-----------------+----------------+------------------+---------------+"); 
                      
              p=p->pnext;
                  } 
              }
              dnodesv *search(dlistsv &l,char x[])
              {
                  
              dnodesv *p;
                  
              p=l.phead;
                  while((
              p->info.mssv)!=&& p->pnext!=NULL)
                  {
                      
              p=p->pnext;
                  }
                  return 
              p;
              }
              void deletefirst(dlistsv &l)
              {    
                  
              dnodesv *p;
                  if(
              l.phead!=NULL)
                  {
                      
              p=l.phead;
                      
              l.phead=l.phead->pnext;
                      
              l.phead->pprev=NULL;
                      
              delete p;
                      if(
              l.phead==NULL)
                          
              l.ptail=NULL;
                  }
              }
              void deleteend(dlistsv &l)
              {
                  
              dnodesv *p;
                  if(
              l.phead!=NULL)
                  {
                      
              p=l.ptail;
                      
              l.ptail=l.ptail->pprev;
                      
              l.ptail->pnext=NULL;
                      
              delete p;
                      if(
              l.ptail=NULL)
                          
              l.phead=NULL;
                  }
              }
              void deletemid(dlistsv &l)
              {
                  
              dnodesv *p;
                  
              p->pprev->pnext=p->pnext;
                  
              p->pnext->pprev p->pprev;
                  
              delete p;
              }
              void main()
              {
                  
              char x[10];
                  
              int s=0;
                  
              dnodesv *p;
                  
              dlistsv l;
                  
              createlist(l);
                  
              nhapsv(l);
                  
              output(l);
                  
              p=l.phead;
                  while(
              p)
                  {
                      if((
              p->info.diemTB)>7.0 || (p->info.diemTB)==7.0)
                          
              s++;
                      
              p=p->pnext;
                  }
                  
              printf("tong so sinh vien co diem trung binh >=7 la: %d",s);
                  
              deletefirst(l);
                  
              deleteend(l);
                  
              output(l);
                  
              printf("\n");
                  
              printf("nhap MSSV can tim: ");
                  
              fflush(stdin);
                  
              gets_s(x);
                  while(
              strlen(x)<|| strlen(x)>10);
                  if(
              search(l,x)==NULL)
                      
              printf("khong co sinh vien trong danh sach");
                  else
                      
              printf("co sinh vien trong danh sach");

              :unhappy:
              Hà Tĩnh Quê Choa:sunglasses:
              FACEBOOK

              Comment


              • #8
                PHP Code:
                void swap(sv &sv1,sv &sv2)
                {
                    
                sv t=sv1;
                    
                sv1=sv2;
                    
                sv2=t;
                }
                void interchange_sort(dlistsv &l)
                {
                    
                dnodesv *i;
                    
                dnodesv *j;
                    for(
                i=l.phead;i!=l.ptail;i=i->pnext)
                        for(
                j=i->pnext;j!=NULL;j=j->pnext)
                            if(
                strcmp(j->info.mssv,i->info.mssv)<0)
                                
                swap(j->info,i->info);

                cho em hỏi em viết cái hàm này sai chỗ nào sao mà khi em nhập mssv theo thứ tự là
                3
                2
                1
                thì nó sắp xếp ra đúng
                nhưng khi em nhập ngẫu nhiên như thế này
                5454
                587
                64564
                nó lại sắp xếp sai, em không tìm được lý do sao lại sai nữa! :confuse::unhappy:

                Comment


                • #9
                  Originally posted by 12520782 View Post
                  PHP Code:
                  void swap(sv &sv1,sv &sv2)
                  {
                      
                  sv t=sv1;
                      
                  sv1=sv2;
                      
                  sv2=t;
                  }
                  void interchange_sort(dlistsv &l)
                  {
                      
                  dnodesv *i;
                      
                  dnodesv *j;
                      for(
                  i=l.phead;i!=l.ptail;i=i->pnext)
                          for(
                  j=i->pnext;j!=NULL;j=j->pnext)
                              if(
                  strcmp(j->info.mssv,i->info.mssv)<0)
                                  
                  swap(j->info,i->info);

                  cho em hỏi em viết cái hàm này sai chỗ nào sao mà khi em nhập mssv theo thứ tự là
                  3
                  2
                  1
                  thì nó sắp xếp ra đúng
                  nhưng khi em nhập ngẫu nhiên như thế này
                  5454
                  587
                  64564
                  nó lại sắp xếp sai, em không tìm được lý do sao lại sai nữa! :confuse::unhappy:
                  Nó sắp như thế nào mà em nói là nó sai? Và đáng lý phải sắp như thế nào mới là đúng?

                  Comment


                  • #10
                    theo em nghĩ đáng lý ra phải sắp là 587->5454->64564, tại em cho sắp tăng dần

                    Comment

                    LHQC

                    Collapse
                    Working...
                    X