This is never a straightforward single answer, but it's generally accepted that the first approach would be to include the Data Layer in the <head>, and the Adobe Launch later in the <head>. In many cases, the Adobe Launch script will be one of the last things in the <head>, and deployed in a synchronous manner (NOT async - but more on that later...).
Then, of course you'll have the pagebottom script as the last possible thing in the <body>.
Then you get into more discussions based on your individual needs. How important is it that you avoid synchronous scripts? How do you need Adobe Target or other Tools to function? When/how are you going to control your collection to avoid missing event timing if the library isn't done loading?
For more info on sync vs. async, check out this page in the docs: https://docs.adobelaunch.com/client-side-information/web/asynchronous-deployment
https://docs.adobelaunch.com/client-side-information/web/asynchronous-deployment
Hopefully this helps you get started on the discussion and investigation to what works best for you.