Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <conio.h>
- #include <stdio.h>
- #include <math.h>
- // KHAI BÁO NODE**********************
- struct Node
- {
- int Data;
- struct Node *pNext; // tí dổi thành next
- };
- typedef struct Node NODE; // tí đổi thành SNode;
- struct List
- {
- NODE *pHead;
- NODE *pTail;
- };
- typedef struct List LIST; //tí đổi thành SList
- // KHỞI TẠO********************************
- void Intic(LIST &l) // sử dụng trong InPut
- {
- l.pHead = l.pTail = NULL;
- }
- // XUẤT NODE theo đề
- void XuatNode(NODE *p)
- {
- printf("%d ", p->Data);
- }
- // TẠO NODE **********************
- NODE *CreateNode(int data)
- {
- // Kiểm tra bộ nhớ
- NODE *p = new NODE;
- if(p == NULL)
- {
- printf("\nMua them cay Ram nhe!Het bo nho roi!!!");
- getch();
- return NULL;
- }
- p->Data = data;
- p->pNext = NULL;
- return p; // trả về NODE p
- }
- // THÊM ĐẦU / THÊM CUỐI****************
- void AddHead(LIST &l, NODE *p) // Thêm đầu
- {
- // Kiểm tra danh sách có rỗng hay không
- if(l.pHead == NULL)
- l.pHead = l.pTail = p;
- else
- {
- p->pNext = l.pHead;
- l.pHead = p;
- }
- }
- void AddTail(LIST &l, NODE *p) // Thêm cuối
- {
- // Kiểm tra LIST có rỗng hay không
- if(l.pHead == NULL)
- l.pHead = l.pTail = p;
- else
- {
- l.pTail->pNext = p;
- l.pTail = p;
- }
- }
- // Thêm NODE p vào sau q
- void ThemSau(LIST &l, NODE *q, NODE *p)
- {
- if(p == NULL || q == NULL)
- return;
- for(NODE *k = l.pHead; k != NULL; k = k ->pNext)
- {
- if(k->Data == q->Data)
- {
- p->pNext = k->pNext;
- k->pNext = p;
- }
- }
- if(l.pTail == q) // kiểm tra ngoại lệ
- l.pTail = p;
- }
- // InPut / OutPut ********************
- void InPut(LIST &l, int n)
- {
- Intic(l);
- for(int i = 0; i < n; i++)
- {
- int x;
- printf("\nNhap vao NODE thu %d: ", i + 1);
- printf("\nNhap Data: ");
- scanf("%d", &x);
- NODE *p = CreateNode(x);
- AddTail(l, p);
- }
- }
- // XUẤT LIST
- void OutPut(LIST l)
- {
- printf("\nDanh sach: ");
- for(NODE *p = l.pHead; p != NULL; p = p->pNext)
- {
- printf("%d ", p->Data);
- }
- }
- // XÓA ĐẦU
- void XoaDau(LIST &l)
- {
- if(l.pHead != NULL)
- {
- NODE *p = l.pHead;
- l.pHead = l.pHead->pNext;
- delete p;
- return;
- }
- else
- printf("\nBan xoa cai gi khi danh sach cha co gi ca!!!");
- }
- // XÓA CUỐI
- void XoaCuoi(LIST &l)
- {
- if(l.pTail == NULL)
- return;
- NODE *q = new NODE;
- for(NODE *k = l.pHead; k != NULL; k = k->pNext)
- {
- if(k == l.pTail)
- {
- l.pTail = q;
- l.pTail->pNext = NULL;
- delete k;
- return;
- }
- q = k;
- }
- }
- void XoaSauMotNODE(LIST &l, NODE *q)
- {
- for(NODE *k = l.pHead; k != l.pTail; k = k->pNext)
- {
- if(q->Data == k->Data)
- {
- NODE *p = k->pNext;
- k->pNext = p->pNext;
- if(l.pTail == p)
- l.pTail = q;
- delete p;
- return;
- }
- }
- }
- void Giaiphong(LIST &l)
- {
- NODE *q;
- while(l.pHead != NULL)
- {
- q = l.pHead;
- l.pHead = l.pHead->pNext;
- delete q;
- }
- }
- void HoanVi(int &a, int &b)
- {
- int temp = a;
- a = b;
- b = temp;
- }
- void InterchangeSort_LIST(LIST &l) // sau khi sắp xếp đã thay đổi lại giá trị của 2 NODE
- {
- for(NODE *p = l.pHead; p != l.pTail; p = p->pNext)
- {
- for(NODE *q = p->pNext; q != NULL; q = q->pNext)
- {
- if(p->Data > q->Data)
- {
- HoanVi(p->Data, q->Data);
- }
- }
- }
- }
- void SelectionSort(LIST &l)
- {
- for(NODE *p = l.pHead; p != l.pTail; p = p->pNext)
- {
- NODE *min = p;
- for(NODE *q = p->pNext; q != NULL; q = q->pNext)
- if(q->Data < min->Data)
- min = q;
- if(min != p)
- HoanVi(p->Data, min->Data);
- }
- }
- int TinhTongCacSoChan(LIST l)
- {
- int Tong = 0;
- for(NODE *q = l.pHead; q != NULL; q = q->pNext)
- {
- if(q->Data % 2 == 0)
- Tong += q->Data;
- }
- return Tong;
- }
- int DemSoLonHonX(LIST l, int x)
- {
- int dem = 0;
- for(NODE *q = l.pHead; q != NULL; q = q->pNext)
- {
- if(q->Data > x)
- dem++;
- }
- return dem;
- }
- int TimPhanTuNhoNhat(LIST l)
- {
- NODE *min = l.pHead;
- for(NODE *q = l.pHead->pNext; q != NULL; q = q->pNext)
- {
- if(q->Data < min->Data)
- min = q;
- }
- return min->Data;
- }
- NODE *TimNODEX(LIST l, int x)
- {
- for(NODE *q = l.pHead; q != NULL; q = q->pNext)
- {
- if(q->Data == x)
- return q;
- }
- }
- void XoaPhanTuLonHon4(LIST &l)
- {
- if(l.pHead ->pNext == NULL) // trường hợp LIST có 1 phần tử
- if(l.pHead->Data > 4)
- {
- Giaiphong(l);
- return;
- }
- if(l.pHead != NULL)
- {
- NODE *q = l.pHead;
- for(NODE *k = l.pHead->pNext; k != l.pTail; k = k->pNext)
- {
- if(k->Data > 4)
- {
- NODE *g = k->pNext; //NODE sau
- q->pNext = g; // đặt lại liên kết
- delete k;
- k = q; // gán lại bằng NODE trước
- }
- q = k; //NODE trước
- }
- }
- else
- return;
- if(l.pHead->Data > 4)
- XoaDau(l);
- if(l.pTail->Data > 4)
- XoaCuoi(l);
- }
- int KTNT(int n)
- {
- if(n < 2)
- return 0;
- if(n > 2)
- {
- if(n % 2 == 0)
- return 0;
- for(int i = 3; i <= sqrt((float)n); i += 2)
- {
- if(n % i == 0)
- return 0;
- }
- }
- return 1;
- }
- int TinhTongSNT(LIST l)
- {
- int Tong = 0;
- for(NODE *q = l.pHead; q != NULL; q = q->pNext)
- {
- if(KTNT(q->Data))
- Tong += q->Data;
- }
- return Tong;
- }
- int main()
- {
- int n;
- LIST l;
- printf("\nNhap vao so luong phan tu: ");
- scanf("%d", &n);
- InPut(l, n);
- OutPut(l);
- // THÊM SAU
- int a = 69,b = 4;
- NODE *p = CreateNode(a);
- NODE *q = CreateNode(b);
- //ThemSau(l, q, p);
- //printf("\nSau khi them: ");
- //OutPut(l);
- /*printf("\nSau khi xoa dau: ");
- XoaDau(l);
- OutPut(l);*/
- //printf("\nSau khi xoa cuoi: ");
- //XoaCuoi(l);
- //OutPut(l);
- /*
- int x;
- printf("\nNhap vao NODE truoc NODE can xoa: ");
- scanf("%d", &x);
- NODE *z = CreateNode(x);
- printf("\nSau khi xoa cuoi: ");
- XoaSauMotNODE(l, z);
- OutPut(l);
- */
- //printf("\nDanh sach sau khi sap xep: ");
- ////InterchangeSort_LIST(l);
- //SelectionSort(l);
- //OutPut(l);
- /*int Tong = TinhTongCacSoChan(l);
- printf("\nTong cac so chan trong LIST: %d", Tong);*/
- // int so;
- // printf("\nNhap vao so can kiem tra: ");
- // scanf("%d", &so);
- //// int dem = DemSoLonHonX(l, so);
- // int dem = DemSoLonHonX(l, 10); // đề yêu cầu 10.
- //// printf("\nSo cac so lon hon %d: %d", so, dem);
- // printf("\nSo cac so lon hon 10: %d", dem);
- /*int min = TimPhanTuNhoNhat(l);
- printf("\nPhan tu min: %d", min);*/
- //int giatrix;
- //printf("\nNhap vao gia tri cua NODE can tim: ");
- //scanf("%d", &giatrix);
- //NODE *NODEX = TimNODEX(l, giatrix);
- //printf("\nNODE vua tim: %d", NODEX->Data);
- XoaPhanTuLonHon4(l);
- printf("\nDanh sach sau khi xoa phan tu lon hon 4: ");
- OutPut(l);
- //int TongSNT = TinhTongSNT(l);
- //printf("\nTong cac SNT: %d", TongSNT);
- Giaiphong(l);
- getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement