#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node *create_node(int);
struct node *add_node(struct node *, int);
void asce_order(struct node *);
void desc_order(struct node *);
struct node
{
int data;
int count;
struct node *next, *previous;
};
struct node *create_node(int value)
{
struct node
*pnode
= malloc(sizeof(struct node
)); pnode->data = value;
pnode->count = 1;
pnode->next = pnode->previous = NULL;
return pnode;
}
struct node *add_node(struct node *pnode, int value)
{
if (pnode == NULL)
{
pnode = create_node(value);
return pnode;
}
else if (pnode->data == value)
{
pnode->count++;
return pnode;
}
if (pnode->data > value)
{
if (pnode->previous == NULL)
{
return pnode->previous = create_node(value);
}
return add_node(pnode->previous, value);
}
else
{
if (pnode->next == NULL)
{
return pnode->next = create_node(value);
}
return add_node(pnode->next, value);
}
}
void asce_order(struct node *pnode)
{
int i;
if (pnode->previous != NULL)
{
asce_order(pnode->previous);
}
for(i = 0; i < pnode->count; i++)
{
}
if(pnode->next != NULL)
{
asce_order(pnode->next);
}
}
void desc_order(struct node *pnode)
{
int i;
if (pnode->next != NULL)
{
desc_order(pnode->next);
}
for (i = 0; i < pnode->count; i++)
{
}
if (pnode->previous != NULL)
{
desc_order(pnode->previous);
}
}
void free_variables(struct node *pnode)
{
if (pnode == NULL)
{
return;
}
if (pnode->next != NULL)
{
free_variables(pnode->next);
}
if (pnode->previous != NULL)
{
free_variables(pnode->previous);
}
}
int main(void)
{
struct node *head=NULL;
head = add_node(head, 2);
add_node(head, 0);
add_node(head, 6);
add_node(head, 7);
add_node(head, 4);
add_node(head, 2);
add_node(head, 8);
add_node(head, 3);
add_node(head, 7);
add_node(head, 5);
add_node(head, 0);
add_node(head, 1);
add_node(head, 6);
add_node(head, 9);
asce_order(head);
printf("descending order:\n"); desc_order(head);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKc3RydWN0IG5vZGUgKmNyZWF0ZV9ub2RlKGludCk7CnN0cnVjdCBub2RlICphZGRfbm9kZShzdHJ1Y3Qgbm9kZSAqLCBpbnQpOwp2b2lkIGFzY2Vfb3JkZXIoc3RydWN0IG5vZGUgKik7CnZvaWQgZGVzY19vcmRlcihzdHJ1Y3Qgbm9kZSAqKTsKCnN0cnVjdCBub2RlCnsKICAgIGludCBkYXRhOwogICAgaW50IGNvdW50OwogICAgc3RydWN0IG5vZGUgKm5leHQsICpwcmV2aW91czsKfTsKCnN0cnVjdCBub2RlICpjcmVhdGVfbm9kZShpbnQgdmFsdWUpCnsKICAgIHN0cnVjdCBub2RlICpwbm9kZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKICAgIHBub2RlLT5kYXRhID0gdmFsdWU7CiAgICBwbm9kZS0+Y291bnQgPSAxOwogICAgcG5vZGUtPm5leHQgPSBwbm9kZS0+cHJldmlvdXMgPSBOVUxMOwogICAgcmV0dXJuIHBub2RlOwp9CgpzdHJ1Y3Qgbm9kZSAqYWRkX25vZGUoc3RydWN0IG5vZGUgKnBub2RlLCBpbnQgdmFsdWUpCnsKICAgIGlmIChwbm9kZSA9PSBOVUxMKQogICAgewogICAgICAgIHBub2RlID0gY3JlYXRlX25vZGUodmFsdWUpOwogICAgICAgIHJldHVybiBwbm9kZTsKICAgIH0KICAgIGVsc2UgaWYgKHBub2RlLT5kYXRhID09IHZhbHVlKQogICAgewogICAgICAgIHBub2RlLT5jb3VudCsrOwogICAgICAgIHJldHVybiBwbm9kZTsKICAgIH0KCiAgICBpZiAocG5vZGUtPmRhdGEgPiB2YWx1ZSkKICAgIHsKICAgICAgICBpZiAocG5vZGUtPnByZXZpb3VzID09IE5VTEwpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gcG5vZGUtPnByZXZpb3VzID0gY3JlYXRlX25vZGUodmFsdWUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWRkX25vZGUocG5vZGUtPnByZXZpb3VzLCB2YWx1ZSk7CiAgICB9CiAgICBlbHNlIAogICAgewogICAgICAgIGlmIChwbm9kZS0+bmV4dCA9PSBOVUxMKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHBub2RlLT5uZXh0ID0gY3JlYXRlX25vZGUodmFsdWUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWRkX25vZGUocG5vZGUtPm5leHQsIHZhbHVlKTsKICAgIH0KfQoKdm9pZCBhc2NlX29yZGVyKHN0cnVjdCBub2RlICpwbm9kZSkKewogICAgaW50IGk7CgogICAgaWYgKHBub2RlLT5wcmV2aW91cyAhPSBOVUxMKQogICAgewogICAgICAgIGFzY2Vfb3JkZXIocG5vZGUtPnByZXZpb3VzKTsKICAgIH0KCiAgICBmb3IoaSA9IDA7IGkgPCBwbm9kZS0+Y291bnQ7IGkrKykKICAgIHsKICAgICAgICBwcmludGYoIiVkXG4iLCBwbm9kZS0+ZGF0YSk7CiAgICB9CgogICAgaWYocG5vZGUtPm5leHQgIT0gTlVMTCkKICAgIHsKICAgICAgICBhc2NlX29yZGVyKHBub2RlLT5uZXh0KTsKICAgIH0KfQoKdm9pZCBkZXNjX29yZGVyKHN0cnVjdCBub2RlICpwbm9kZSkKewogICAgaW50IGk7CgogICAgaWYgKHBub2RlLT5uZXh0ICE9IE5VTEwpCiAgICB7CiAgICAgICAgZGVzY19vcmRlcihwbm9kZS0+bmV4dCk7CiAgICB9CgogICAgZm9yIChpID0gMDsgaSA8IHBub2RlLT5jb3VudDsgaSsrKQogICAgewogICAgICAgIHByaW50ZigiJWRcbiIsIHBub2RlLT5kYXRhKTsKICAgIH0KCiAgICBpZiAocG5vZGUtPnByZXZpb3VzICE9IE5VTEwpCiAgICB7CiAgICAgICAgZGVzY19vcmRlcihwbm9kZS0+cHJldmlvdXMpOwogICAgfQp9Cgp2b2lkIGZyZWVfdmFyaWFibGVzKHN0cnVjdCBub2RlICpwbm9kZSkKewogICAgaWYgKHBub2RlID09IE5VTEwpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChwbm9kZS0+bmV4dCAhPSBOVUxMKQogICAgewogICAgICAgIGZyZWVfdmFyaWFibGVzKHBub2RlLT5uZXh0KTsKICAgIH0KCiAgICBpZiAocG5vZGUtPnByZXZpb3VzICE9IE5VTEwpCiAgICB7CiAgICAgICAgZnJlZV92YXJpYWJsZXMocG5vZGUtPnByZXZpb3VzKTsKICAgIH0KCiAgICBmcmVlKHBub2RlKTsKfQoKaW50IG1haW4odm9pZCkKewogICAgc3RydWN0IG5vZGUgKmhlYWQ9TlVMTDsKCiAgICBoZWFkID0gYWRkX25vZGUoaGVhZCwgMik7CiAgICBhZGRfbm9kZShoZWFkLCAwKTsKICAgIGFkZF9ub2RlKGhlYWQsIDYpOwogICAgYWRkX25vZGUoaGVhZCwgNyk7CiAgICBhZGRfbm9kZShoZWFkLCA0KTsKICAgIGFkZF9ub2RlKGhlYWQsIDIpOwogICAgYWRkX25vZGUoaGVhZCwgOCk7CiAgICBhZGRfbm9kZShoZWFkLCAzKTsKICAgIGFkZF9ub2RlKGhlYWQsIDcpOwogICAgYWRkX25vZGUoaGVhZCwgNSk7CiAgICBhZGRfbm9kZShoZWFkLCAwKTsKICAgIGFkZF9ub2RlKGhlYWQsIDEpOwogICAgYWRkX25vZGUoaGVhZCwgNik7CiAgICBhZGRfbm9kZShoZWFkLCA5KTsKCiAgICBwcmludGYoImFzY2VuZGluZyBvcmRlcjpcbiIpOwogICAgYXNjZV9vcmRlcihoZWFkKTsKCiAgICBwcmludGYoImRlc2NlbmRpbmcgb3JkZXI6XG4iKTsKICAgIGRlc2Nfb3JkZXIoaGVhZCk7CgogICAgcmV0dXJuIDA7Cn0K