#include <stdio.h>
#include <ctype.h>
#include <malloc.h>
typedef struct _node {
const char* p;
struct _node* next;
} node;
typedef struct {
node* head;
node* tail;
} slist;
void slist_init(slist* lst);
int slist_push_front(slist* lst, const char* p);
int slist_push_back(slist* lst, const char* p);
void slist_clear(slist* lst);
void split_word(slist* lst, char* s){
int h;
char* p;
slist_init(lst);
while(*s){
++s;
p = s;
h = 0;
if(! h)
h = (*p >= '8');
++p;
}
if(*s){
if(*p != '\0')
*p++ = '\0';
if(h)
slist_push_back(lst, s);
else
slist_push_front(lst, s);
}
s = p;
}
}
int main(void){
node* it;
slist deq;
char s[128] = "AB 12 FF 8E AC 78 9A 77 75 DC 10 45 67 CF 33";
/*
printf("enter str: ");
fgets(s, sizeof(s), stdin);
fflush(stdin);
*/
split_word(&deq, s);
//вывести
for(it = deq.head; it != NULL; it = it->next)
slist_clear(&deq);
return 0;
}
//инициализация списка
void slist_init(slist* lst){
lst->head = lst->tail = NULL;
}
//вставка элемента в голову списка
int slist_push_front(slist* lst, const char* p){
node
* n
= (node
*)malloc(sizeof(node
)); if(n != NULL){
n->next = NULL;
n->p = p;
if(lst->head == NULL)
lst->head = lst->tail = n;
else {
n->next = lst->head;
lst->head = n;
}
}
return (n != NULL);
}
//вставка элемента в конец списка
int slist_push_back(slist* lst, const char* p){
node
* n
= (node
*)malloc(sizeof(node
)); if(n != NULL){
n->next = NULL;
n->p = p;
if(lst->head == NULL)
lst->head = lst->tail = n;
else {
lst->tail->next = n;
lst->tail = n;
}
}
return (n != NULL);
}
//удаление списка
void slist_clear(slist* lst){
node* t;
while(lst->head != NULL){
t= lst->head;
lst->head = lst->head->next;
}
lst->tail = NULL;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSA8bWFsbG9jLmg+Cgp0eXBlZGVmIHN0cnVjdCBfbm9kZSB7Cgljb25zdCBjaGFyKiBwOwoJc3RydWN0IF9ub2RlKiBuZXh0Owp9IG5vZGU7Cgp0eXBlZGVmIHN0cnVjdCB7Cglub2RlKiBoZWFkOwoJbm9kZSogdGFpbDsKfSBzbGlzdDsKCnZvaWQgc2xpc3RfaW5pdChzbGlzdCogbHN0KTsKaW50ICBzbGlzdF9wdXNoX2Zyb250KHNsaXN0KiBsc3QsIGNvbnN0IGNoYXIqIHApOwppbnQgIHNsaXN0X3B1c2hfYmFjayhzbGlzdCogbHN0LCBjb25zdCBjaGFyKiBwKTsKdm9pZCBzbGlzdF9jbGVhcihzbGlzdCogbHN0KTsKCgp2b2lkIHNwbGl0X3dvcmQoc2xpc3QqIGxzdCwgY2hhciogcyl7CglpbnQgICBoOwoJY2hhciogcDsKCglzbGlzdF9pbml0KGxzdCk7CgoJd2hpbGUoKnMpewoKCQl3aGlsZSgqcyAmJiAhIGlzeGRpZ2l0KCpzKSkKCQkJKytzOwoKCQlwID0gczsKCQloID0gMDsKCQl3aGlsZShpc3hkaWdpdCgqcCkpewoJCQlpZighIGgpCgkJCQloID0gKCpwID49ICc4Jyk7CgkJCSsrcDsKCQl9CgoJCWlmKCpzKXsKCQkJaWYoKnAgIT0gJ1wwJykKCQkJCSpwKysgPSAnXDAnOwoKCQkJaWYoaCkKCQkJCXNsaXN0X3B1c2hfYmFjayhsc3QsIHMpOwoJCQllbHNlCgkJCQlzbGlzdF9wdXNoX2Zyb250KGxzdCwgcyk7CgkJfQoJCXMgPSBwOwoJfQp9CgoKaW50IG1haW4odm9pZCl7Cglub2RlKiBpdDsKCXNsaXN0IGRlcTsKCgljaGFyIHNbMTI4XSA9ICJBQiAxMiBGRiA4RSBBQyA3OCA5QSA3NyA3NSBEQyAxMCA0NSA2NyBDRiAzMyI7Ci8qCglwcmludGYoImVudGVyIHN0cjogIik7CglmZ2V0cyhzLCBzaXplb2YocyksIHN0ZGluKTsKCWZmbHVzaChzdGRpbik7CiovCglzcGxpdF93b3JkKCZkZXEsIHMpOwoKCS8v0LLRi9Cy0LXRgdGC0LgKCWZvcihpdCA9IGRlcS5oZWFkOyBpdCAhPSBOVUxMOyBpdCA9IGl0LT5uZXh0KQoJCXByaW50ZigiJXMgIiwgaXQtPnApOwoKCXNsaXN0X2NsZWFyKCZkZXEpOwoJcmV0dXJuIDA7Cn0KCi8v0LjQvdC40YbQuNCw0LvQuNC30LDRhtC40Y8g0YHQv9C40YHQutCwCnZvaWQgc2xpc3RfaW5pdChzbGlzdCogbHN0KXsKCWxzdC0+aGVhZCA9IGxzdC0+dGFpbCA9IE5VTEw7Cn0KCi8v0LLRgdGC0LDQstC60LAg0Y3Qu9C10LzQtdC90YLQsCDQsiDQs9C+0LvQvtCy0YMg0YHQv9C40YHQutCwCmludCBzbGlzdF9wdXNoX2Zyb250KHNsaXN0KiBsc3QsIGNvbnN0IGNoYXIqIHApewoJbm9kZSogbiA9IChub2RlKiltYWxsb2Moc2l6ZW9mKG5vZGUpKTsKCWlmKG4gIT0gTlVMTCl7CgkJbi0+bmV4dCA9IE5VTEw7CgkJbi0+cCAgICA9IHA7CgoJCWlmKGxzdC0+aGVhZCA9PSBOVUxMKQoJCQlsc3QtPmhlYWQgPSBsc3QtPnRhaWwgPSBuOwoJCWVsc2UgewoJCQluLT5uZXh0ICAgPSBsc3QtPmhlYWQ7CgkJCWxzdC0+aGVhZCA9IG47CgkJfQoJfQoJcmV0dXJuIChuICE9IE5VTEwpOwp9CgoKLy/QstGB0YLQsNCy0LrQsCDRjdC70LXQvNC10L3RgtCwINCyINC60L7QvdC10YYg0YHQv9C40YHQutCwCmludCBzbGlzdF9wdXNoX2JhY2soc2xpc3QqIGxzdCwgY29uc3QgY2hhciogcCl7Cglub2RlKiBuID0gKG5vZGUqKW1hbGxvYyhzaXplb2Yobm9kZSkpOwoJaWYobiAhPSBOVUxMKXsKCQluLT5uZXh0ID0gTlVMTDsKCQluLT5wICAgID0gcDsKCgkJaWYobHN0LT5oZWFkID09IE5VTEwpCgkJCWxzdC0+aGVhZCA9IGxzdC0+dGFpbCA9IG47CgkJZWxzZSB7CgkJCWxzdC0+dGFpbC0+bmV4dCA9IG47CgkJCWxzdC0+dGFpbCA9IG47CgkJfQoJfQoJcmV0dXJuIChuICE9IE5VTEwpOwp9CgovL9GD0LTQsNC70LXQvdC40LUg0YHQv9C40YHQutCwCnZvaWQgc2xpc3RfY2xlYXIoc2xpc3QqIGxzdCl7Cglub2RlKiB0OwoJd2hpbGUobHN0LT5oZWFkICE9IE5VTEwpewoJCXQ9IGxzdC0+aGVhZDsKCQlsc3QtPmhlYWQgPSBsc3QtPmhlYWQtPm5leHQ7CgkJZnJlZSh0KTsKCX0KCWxzdC0+dGFpbCA9IE5VTEw7Cn0K