MinhIT1991 Admin
Tổng số bài gửi : 130 Join date : 12/08/2011 Age : 32 Đến từ : Đại học Lạc Hồng
| Tiêu đề: Share bài tập "Danh sách liên kết" Sat 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(); }
|
|
can1caiten Nhập môn
Tổng số bài gửi : 16 Join date : 05/09/2011 Đến từ : Việt Nam
| Tiêu đề: Re: Share bài tập "Danh sách liên kết" Wed 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; } |
|
MinhIT1991 Admin
Tổng số bài gửi : 130 Join date : 12/08/2011 Age : 32 Đến từ : Đại học Lạc Hồng
| Tiêu đề: Re: Share bài tập "Danh sách liên kết" Fri Sep 30, 2011 11:22 am | |
| chua du dang cap de gop y voi tui dau bai do con kem lam' |
|
Sponsored content
| Tiêu đề: Re: Share bài tập "Danh sách liên kết" | |
| |
|