Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (17.49 KB, 6 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
Mo ta:
typedef struct {
int key;
float value;
} elem;
//======Tong hop theo khoa key tren dslk khong thu tu=======
void tonghop(list &l)
{
nodeptr p, q, c;
if (l.count==0) return;
q = l.head;
while (q!=NULL)
{
p = q;
c = q->next;
while (c!=NULL)
{
if (q->data.key==c->data.key)
{
q->data.value+=c->data.value;
if (c->next==NULL) l.rear = p;
p->next = c->next;
else
p = c;
c = p->next;
}
q = q->next;
}
}
//======Tong hop theo khoa key tren dslk co thu tu=======
void tonghoptt(list &l)
{
nodeptr q, c;
if (l.count==0) return;
q = l.head;
while (q!=NULL)
{
c = q->next;
while (c!=NULL && q->data.key==c->data.key)
{
q->data.value+=c->data.value;
if (c->next==NULL) l.rear = q;
q->next = c->next;
}
q = c;
}
}
//======Tach dslk thanh 2 dslk theo 1 dieu kien ========
void tach(list &l, list &l1, list &l2)
{
nodeptr c, c1, c2, q1, q2;
l1.count = l2.count = 0;
c1 = q1 = new node;
c2 = q2 = new node;
c = l.head;
while (c!=NULL)
{
if (c->data.value>=5)
{
c1->next = c;
c1 = c;
l1.count++;
else
{
}
c = c->next;
}
c1->next = c2->next = NULL;
l1.head = q1->next;
l2.head = q2->next;
l1.rear = (l1.head==NULL? NULL:c1);
l2.rear = (l2.head==NULL? NULL:c2);
delete q1;
delete q2;
l.head = l.rear =NULL;
l.count = 0;
}
//Tach dslk thanh 2 dslk theo 1 dieu kien tong quat hon
void tach(list &l, list &l1, int (*cond(elem))
{
nodeptr c, c1, c2, q1, q2;
int n=0;
l1.count = l2.count = 0;
c1 = q1 = new node;
c2 = q2 = new node;
c = l.head;
if (cond(c->data))
{
c1->next = c;
c1 = c;
l1.count++;
}
else
{
c2->next = c;
c2 = c;
n++;
}
c = c->next;
}
c1->next = c2->next = NULL;
l1.head = q1->next;
l.head = q2->next;
l1.rear = (l1.head==NULL? NULL:c1);
l.rear = (l.head==NULL? NULL:c2);
delete q1;
delete q2;
}
{
return x.value<4;
}
int tb(elem x)
{
return x.value<6;
}
int kha(elem x)
{
return x.value<8;
}
list l, lk, lkha, ltb;
// Loi goi de tach