Diễn đàn lớp 10CT111


 
Trang ChínhLịch họcGalleryLatest imagesTìm kiếmĐăng kýĐăng Nhập

Share | 
 

 Share bài tập "Danh sách liên kết"

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
MinhIT1991
Admin
Admin
MinhIT1991

Tổng số bài gửi : 130
Join date : 12/08/2011
Age : 32
Đến từ : Đại học Lạc Hồng

Share bài tập "Danh sách liên kết" Empty
Bài gửiTiêu đề: Share bài tập "Danh sách liên kết"   Share bài tập "Danh sách liên kết" Expire10Sat Sep 24, 2011 9:09 pm

Đề: khởi tạo 1 danh sách lưu chữ các số nguyên dương
1. đếm số node của danh sách
2. đếm số node chẵn của danh sách
3. tổng các node chẵn
4. tổng các node nguyên tố
5. xỏa node ở vị trí thừ i
6. xỏa các node mang giá trị chẵn
Code:
#include <iostream>
#include <conio.h>

using namespace std;

struct Node //cầu trúc của node
{
   int data;
   Node *pNext;
};

Node *CreateNode(int val);
void AddFirst(Node* &pHead, Node *p);
void AddLast(Node* &pHead, Node *p);
void PrintList(Node *pHead);
Node *PickFirst(Node* &pHead);
int CountNode(Node *pHead);
int CountNodeEven(Node *pHead);
int SumNodeEven(Node *pHead);
bool SoNT(int a);
int SumNodeNT(Node *pHead);



Node *CreateNode(int val)// hàm tạo 1 node
{
   Node *p = new Node;
   p->data = val;
   p->pNext = NULL;
   return p;
}

void AddFirst(Node* &pHead, Node *p) //hàm thêm 1 node vào đầu danh sách
{
   if(pHead == NULL)
      pHead = p;
   else
   {
      p->pNext = pHead;
      pHead = p;
   }
}

void AddLast(Node* &pHead, Node *p)//hàm thêm 1 node vào cuối danh sách
{
   if(pHead == NULL)
      pHead = p;
   else
      AddLast(pHead->pNext, p);
}
void PrintList(Node *pHead)//hàm in danh sách
{
   if(pHead != NULL)
   {
      cout<<pHead->data<<"->";
      PrintList(pHead->pNext);
   }
}


int CountNode(Node *pHead)// hàm đếm số node có trong danh sách
{
   if(pHead == NULL)
      return 0;
   return CountNode(pHead->pNext) +1;
}

int CountNodeEven(Node *pHead)// hàm đếm số node chẵn có trong danh sách
{
   if(pHead == NULL)
      return 0;
   if(pHead->data % 2 == 0)
      return CountNodeEven(pHead->pNext) + 1;
   return CountNodeEven(pHead->pNext);
}

int SumNodeEven(Node *pHead)// hàm tính tổng các node chẵn
{
   if(pHead == NULL)
      return 0;
   if(pHead->data % 2 == 0)
      return SumNodeEven(pHead->pNext) + pHead->data;
   return SumNodeEven(pHead->pNext);
}

bool Prime(int a)// hàm kiểm tra 1 số có phải là số nguyên tố hay không
{
   if(a <= 1)
      return false;
   for(int i=2; i < a ; i++)
      if(a % i == 0)
         return false;
   return true;
}

int SumNodePrime(Node *pHead)// hàm tính tổng các node nguyên tố
{
   if(pHead == NULL)
      return 0;
   if(Prime(pHead->data))
      return SumNodePrime(pHead->pNext) +pHead->data;
   return SumNodePrime(pHead->pNext);
}

void RemoveFirst(Node* &pHead) //hủy node đầu tiên ra khỏi danh sách
{
   Node *p = pHead;
   if(pHead != NULL)
      pHead = p->pNext;
   delete p;
}

void Remove(Node* &pHead, int i) //hủy node thứ i ra khỏi danh sách
{
   if(pHead != NULL)
   {
      if(i == 0) RemoveFirst(pHead);
      else Remove(pHead->pNext, i - 1);
   }
}

void RemoveAll(Node* &pHead, int val)//hủy tất cả các node mang giá trị val ra khỏi danh sách
{
   if(pHead != NULL)
   {
      if(pHead->data == val)
      {
         RemoveFirst(pHead);
         RemoveAll(pHead, val);//trường hợp phần tử tiếp theo mang giá trị val
      }
      else RemoveAll(pHead->pNext, val);
   }
}


void RemoveEven(Node* &pHead)//Hủy tất cả các node mang giá trị chẵn ra khỏi danh sách
{
   if(pHead != NULL)
   {
      if(pHead->data % 2 == 0)
      {
         RemoveFirst(pHead);
         RemoveEven(pHead);// trường hợp phần tử tiếp theo cũng mang giá trị chẵn
      }
      else RemoveEven(pHead->pNext);
   }
}

void main()
{
   Node *pHead = NULL;
   int n;
   while (true)
   {
      cout<<"Nhap so nguyen duong bat ky: "; cin>>n;
      if (n <= 0) break;
      Node *p = CreateNode(n);
      AddLast(pHead, p);
   }
   PrintList(pHead);
   cout<<"\nSo node cua danh sach la: "<<CountNode(pHead);
   cout<<"\nSo node chan cua danh sach la: "<<CountNodeEven(pHead);
   cout<<"\nTong cac Node chan: "<<SumNodeEven(pHead);
   cout<<"\nTong cac Node nguyen to: "<<SumNodePrime(pHead);
   cout<<"\nNhap Node thu i can xoa: ";
   int i;
   cin>>i;
   Remove(pHead,i-1);
   cout<<"\nSau khi xoa Node thu "<<i<<" : ";
   PrintList(pHead);
   RemoveEven(pHead);
   cout<<"\nSau khi xoa cac node chan: ";
   PrintList(pHead);
   getch();
}
Về Đầu Trang Go down
can1caiten
Nhập môn
Nhập môn
can1caiten

Tổng số bài gửi : 16
Join date : 05/09/2011
Đến từ : Việt Nam

Share bài tập "Danh sách liên kết" Empty
Bài gửiTiêu đề: Re: Share bài tập "Danh sách liên kết"   Share bài tập "Danh sách liên kết" Expire10Wed Sep 28, 2011 9:28 pm

mình góp ý hàm kiểm tra số nguyên tố của mình :
int snt(int k)
{
int i=2;
while(k%i!=0)
i++;
if(k==i)
return 1; // la so nguyen to
return 0;
}
Về Đầu Trang Go down
MinhIT1991
Admin
Admin
MinhIT1991

Tổng số bài gửi : 130
Join date : 12/08/2011
Age : 32
Đến từ : Đại học Lạc Hồng

Share bài tập "Danh sách liên kết" Empty
Bài gửiTiêu đề: Re: Share bài tập "Danh sách liên kết"   Share bài tập "Danh sách liên kết" Expire10Fri Sep 30, 2011 11:22 am

chua du dang cap de gop y voi tui dau Smile bai do con kem lam'
Về Đầu Trang Go down
Sponsored content




Share bài tập "Danh sách liên kết" Empty
Bài gửiTiêu đề: Re: Share bài tập "Danh sách liên kết"   Share bài tập "Danh sách liên kết" Expire10

Về Đầu Trang Go down
 

Share bài tập "Danh sách liên kết"

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 

 Similar topics

-
» Forum điểm danh nha!!!!!!!!!!!!!!!!!!!!!!
» share hình nền desktop đẹp
» Mua hộ chiếu, bằng lái xe, thẻ id, chứng chỉ đại học và các văn bản khác. liên hệ(maxprince78@gmail.com)
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
Diễn đàn lớp 10CT111 :: Góc học tập :: Học phần năm II :: Cấu trúc dữ liệu-
Free forum | ©phpBB | Free forum support | Báo cáo lạm dụng | Thảo luận mới nhất