#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char title_[64];
char author_[64];
int pages_;
} Book;
typedef struct {
Book *data_;
int size_;
} Library;
//TODO: write code here
void shiftBooks(Library *library, int insert_position)
{
for(int book_index = library->size_ - 1; book_index >= insert_position; book_index--)
{
Book *source_book = library->data_ + book_index;
Book *destination_book = library->data_ + book_index + 1;
strcpy(destination_book
->title_
, source_book
->title_
); strcpy(destination_book
->author_
, source_book
->author_
); destination_book->pages_ = source_book->pages_;
}
}
void addBookSorted(Library *library, char *title, char *author, int pages)
{
Book
*temporary_book
= realloc(library
->data_
, sizeof(Book
) * (library
->size_
+ 1)); if(!temporary_book)
{
return;
}
library->data_ = temporary_book;
temporary_book = NULL;
int insert_position = -1;
for(int book_index = 0; book_index < library->size_ && insert_position == -1; book_index++)
{
if(library->data_[book_index].pages_ > pages)
{
insert_position = book_index;
}
}
if(insert_position == -1)
{
insert_position = library->size_;
} else {
shiftBooks(library, insert_position);
}
Book *new_book = library->data_ + insert_position;
strcpy(new_book
->title_
, title
); strcpy(new_book
->author_
, author
); new_book->pages_ = pages;
library->size_++;
}
void printLibrary(Library *library)
{
printf("Books (size: %d)\n", library
->size_
); for (int book_index = 0; book_index < library->size_; book_index++)
{
Book current_book = library->data_[book_index];
printf("%s by %s, %d pages\n", current_book.
title_, current_book.
author_, current_book.
pages_); }
}
int main()
{
Library library = { NULL, 0 };
int tc = 0;
if (tc == 1)
{
addBookSorted(&library, "Buch 1", "Autor 1", 10);
addBookSorted(&library, "Buch 2", "Autor 2", 100);
addBookSorted(&library, "Buch 3", "Autor 2", 1000);
printLibrary(&library);
}
else if (tc == 2)
{
addBookSorted(&library, "Buch 1", "Autor 1", 10);
addBookSorted(&library, "Buch 3", "Autor 2", 1000);
addBookSorted(&library, "Buch 2", "Autor 2", 100);
printLibrary(&library);
}
else if (tc == 3)
{
//...
printLibrary(&library);
}
//TODO: free data
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciB0aXRsZV9bNjRdOwogICAgY2hhciBhdXRob3JfWzY0XTsKICAgIGludCBwYWdlc187Cn0gQm9vazsKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJvb2sgKmRhdGFfOwogICAgaW50IHNpemVfOwp9IExpYnJhcnk7CgoKLy9UT0RPOiB3cml0ZSBjb2RlIGhlcmUKdm9pZCBzaGlmdEJvb2tzKExpYnJhcnkgKmxpYnJhcnksIGludCBpbnNlcnRfcG9zaXRpb24pCnsKICAgIGZvcihpbnQgYm9va19pbmRleCA9IGxpYnJhcnktPnNpemVfIC0gMTsgYm9va19pbmRleCA+PSBpbnNlcnRfcG9zaXRpb247IGJvb2tfaW5kZXgtLSkKICAgIHsKICAgICAgICBCb29rICpzb3VyY2VfYm9vayA9IGxpYnJhcnktPmRhdGFfICsgYm9va19pbmRleDsKICAgICAgICBCb29rICpkZXN0aW5hdGlvbl9ib29rID0gbGlicmFyeS0+ZGF0YV8gKyBib29rX2luZGV4ICsgMTsKICAgICAgICAKICAgICAgICBzdHJjcHkoZGVzdGluYXRpb25fYm9vay0+dGl0bGVfLCBzb3VyY2VfYm9vay0+dGl0bGVfKTsKICAgICAgICBzdHJjcHkoZGVzdGluYXRpb25fYm9vay0+YXV0aG9yXywgc291cmNlX2Jvb2stPmF1dGhvcl8pOwogICAgICAgIGRlc3RpbmF0aW9uX2Jvb2stPnBhZ2VzXyA9IHNvdXJjZV9ib29rLT5wYWdlc187CiAgICB9Cn0KCnZvaWQgYWRkQm9va1NvcnRlZChMaWJyYXJ5ICpsaWJyYXJ5LCBjaGFyICp0aXRsZSwgY2hhciAqYXV0aG9yLCBpbnQgcGFnZXMpCnsKICAgIEJvb2sgKnRlbXBvcmFyeV9ib29rID0gcmVhbGxvYyhsaWJyYXJ5LT5kYXRhXywgc2l6ZW9mKEJvb2spICogKGxpYnJhcnktPnNpemVfICsgMSkpOwogICAgaWYoIXRlbXBvcmFyeV9ib29rKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxpYnJhcnktPmRhdGFfID0gdGVtcG9yYXJ5X2Jvb2s7CiAgICB0ZW1wb3JhcnlfYm9vayA9IE5VTEw7CiAgICAKICAgIGludCBpbnNlcnRfcG9zaXRpb24gPSAtMTsKICAgIGZvcihpbnQgYm9va19pbmRleCA9IDA7IGJvb2tfaW5kZXggPCBsaWJyYXJ5LT5zaXplXyAmJiBpbnNlcnRfcG9zaXRpb24gPT0gLTE7IGJvb2tfaW5kZXgrKykKICAgIHsKICAgICAgICBpZihsaWJyYXJ5LT5kYXRhX1tib29rX2luZGV4XS5wYWdlc18gPiBwYWdlcykKICAgICAgICB7CiAgICAgICAgICAgIGluc2VydF9wb3NpdGlvbiA9IGJvb2tfaW5kZXg7CiAgICAgICAgfQogICAgfQogICAgCiAgICBpZihpbnNlcnRfcG9zaXRpb24gPT0gLTEpCiAgICB7CiAgICAgICAgaW5zZXJ0X3Bvc2l0aW9uID0gbGlicmFyeS0+c2l6ZV87CiAgICB9IGVsc2UgewogICAgICAgIHNoaWZ0Qm9va3MobGlicmFyeSwgaW5zZXJ0X3Bvc2l0aW9uKTsKICAgIH0KICAgIAogICAgQm9vayAqbmV3X2Jvb2sgPSBsaWJyYXJ5LT5kYXRhXyArIGluc2VydF9wb3NpdGlvbjsKICAgIHN0cmNweShuZXdfYm9vay0+dGl0bGVfLCB0aXRsZSk7CiAgICBzdHJjcHkobmV3X2Jvb2stPmF1dGhvcl8sIGF1dGhvcik7CiAgICBuZXdfYm9vay0+cGFnZXNfID0gcGFnZXM7CiAgICAKICAgIGxpYnJhcnktPnNpemVfKys7Cn0KCgp2b2lkIHByaW50TGlicmFyeShMaWJyYXJ5ICpsaWJyYXJ5KQp7CiAgICBwcmludGYoIkJvb2tzIChzaXplOiAlZClcbiIsIGxpYnJhcnktPnNpemVfKTsKICAgIGZvciAoaW50IGJvb2tfaW5kZXggPSAwOyBib29rX2luZGV4IDwgbGlicmFyeS0+c2l6ZV87IGJvb2tfaW5kZXgrKykKICAgIHsKICAgICAgICBCb29rIGN1cnJlbnRfYm9vayA9IGxpYnJhcnktPmRhdGFfW2Jvb2tfaW5kZXhdOwogICAgICAgIHByaW50ZigiJXMgYnkgJXMsICVkIHBhZ2VzXG4iLCBjdXJyZW50X2Jvb2sudGl0bGVfLCBjdXJyZW50X2Jvb2suYXV0aG9yXywgY3VycmVudF9ib29rLnBhZ2VzXyk7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgTGlicmFyeSBsaWJyYXJ5ID0geyBOVUxMLCAwIH07CiAgICAKICAgIGludCB0YyA9IDA7CiAgICBwcmludGYoIkVudGVyIHRjOiAiKTsKICAgIHNjYW5mKCIlZCIsICZ0Yyk7CiAgICAKICAgIGlmICh0YyA9PSAxKQogICAgewogICAgICAgIGFkZEJvb2tTb3J0ZWQoJmxpYnJhcnksICJCdWNoIDEiLCAiQXV0b3IgMSIsIDEwKTsKICAgICAgICBhZGRCb29rU29ydGVkKCZsaWJyYXJ5LCAiQnVjaCAyIiwgIkF1dG9yIDIiLCAxMDApOwogICAgICAgIGFkZEJvb2tTb3J0ZWQoJmxpYnJhcnksICJCdWNoIDMiLCAiQXV0b3IgMiIsIDEwMDApOwogICAgICAgIHByaW50TGlicmFyeSgmbGlicmFyeSk7CiAgICB9CiAgICBlbHNlIGlmICh0YyA9PSAyKQogICAgewogICAgICAgIGFkZEJvb2tTb3J0ZWQoJmxpYnJhcnksICJCdWNoIDEiLCAiQXV0b3IgMSIsIDEwKTsKICAgICAgICBhZGRCb29rU29ydGVkKCZsaWJyYXJ5LCAiQnVjaCAzIiwgIkF1dG9yIDIiLCAxMDAwKTsKICAgICAgICBhZGRCb29rU29ydGVkKCZsaWJyYXJ5LCAiQnVjaCAyIiwgIkF1dG9yIDIiLCAxMDApOwogICAgICAgIHByaW50TGlicmFyeSgmbGlicmFyeSk7CiAgICB9CiAgICBlbHNlIGlmICh0YyA9PSAzKQogICAgewogICAgICAgIC8vLi4uCiAgICAgICAgcHJpbnRMaWJyYXJ5KCZsaWJyYXJ5KTsKICAgIH0KICAgIAogICAgLy9UT0RPOiBmcmVlIGRhdGEKICAgIGZyZWUobGlicmFyeS5kYXRhXyk7CiAgICAKICAgIHJldHVybiAwOwp9