Tìm kiếm

Bài tập DSLK kép

Câu Hỏi :\

Cho danh sách liên kết kép cấu trúc:
       struct  hs
            {
                char    ht [30];
                float    ns ;
                hs* next;
                hs* prev;
              }
  Gọi p con trỏ trỏ tới nút đầu danh sách
a)Bổ sung một phần tử vào cuối danh sách.
b)Tìm in ra họ tên các học sinh năm sinh từ năm 1980 trở về đây.
c)Xóa một phần tửđầu danh sách.




BÀI THAM KHẢO:



   #include <iostream.h>
   #include <stdio.h>


struct   hs
                 {
                      char   ht [30] ;
int     ns ;
                  };   

typedef   struct    node
                  {
                       hs    info ;
 node    *next ;
                       node    *prev;   
                  };


            struct   List
                 {
 node  *head ;
      node  *tail ; 
                  };
// Khởi tạo DS rỗng 
void   CreatList(List & L)
      {
L.head = NULL ;
         L.tail = NULL ;
        }
node *  new_ele =  NULL;


  
// Nhập thông tin cho 1 phần tử
   node*   _input ()
 {
 node * q = new  node ;
 cout<< "\nHo ten : " ;
 fflush  (stdin) ;
 gets ( q -> info.ht ) ;
 cout<< "Nhap nam sinh : " ;
        cin>> q -> info.ns ;
 q -> next = q -> prev = NULL ;
        return q ;
      }


//  Bổ sung 1 phần tử vào cuối danh sách 
    void   AddTail   (List & L ) 
{
           new_ele = _input () ;  // Nhập thông tin 1 ptu mới 
           if ( L.head == NULL ) // Kiểm tra DS rỗng
{
                  //Nếu rỗng thì
//head = new_ele;
//tail = head;
L.head = L.tail = new_ele ; 
               }
else
             {
//Ngược lại
//tail = new_ele->prev;
//tail->next = new_ele;
//tail = new_ele;
 new_ele -> prev = L.tail ;
                 L.tail -> next = new_ele;                 
 L.tail = new_ele;
              }
}
 // In ra danh sách học sinh có nam sinh từ 1980 trở về dây 


 void   Process  ( List   L )
 {
            node * p = L.head  ; // con trỏ trỏ tới ptu đầu tiên của danh sách
if  ( L.head == NULL ) //Kiểm tra DS rỗng
cout<< "\nDanh sach rong !!! " ;
cout<<"\n\n============================================\n";
cout<< "\nDanh sach nhung nguoi sinh sau nam 1980 : \n  " ;
while ( p -> next != NULL )
               {
if ( p -> info.ns > 1980 )
//Trong khi (p!=NULL)& ( p -> info.ns > 1980 ) 
//Th?c hi?n:
//Xu?t ra thông tin p
//p = p->next;
                     {
cout<<"\nHo ten : "<<p ->info.ht ;
cout<<"\nNam sinh :"<<p->info.ns;
cout<<"\n";
 }
p = p->next;
}
}
//Xóa  thông tin học sinh cuối danh sách
  void   DelTail  ( List  & L )
 {
 node *  p ;
 if  ( L.tail != NULL ) // Nếu danh sách khác rỗng
{
L.tail = p ; //p là phần tử cần hủy
//Tách p ra khỏi xâu
L.tail = L.tail -> prev ;
L.tail -> next = NULL ;
delete  p ; //Hủy biến do p trỏ đến
if ( L.head == NULL )
//Nếu nút dầu là rỗng thì nút cuối rỗng
L.tail = NULL ;
else
//nguợc lại head->prev = NULL;
L.head -> prev = NULL ;
 }
 }


void main ()
{
 List  L ;
 CreatList(L) ;
 int  t = 1 ;
 cout<<"\nThem 1 phan tu vao cuoi danh sach ";
 while  ( t ==1 )
 {
AddTail  ( L) ;
cout<< "Tiep tuc nhap ? ( 1 / 0 ) : " ;
cin>> t ;
}
 Process( L ) ;
 }









Read Users' Comments (0)

Support

Liên hệ DMTuan-Uneti
Mọi thông tin góp ý các bạn liên hệ với mình ! Mail:
  1. manhtuan.leo@gmail.com
  2. manhtuan.itvp@gmail.com

Y!M: manhtuan.it92