Any general-purpose programming language, including all assembly languages, can be used to implement data structures and algorithms. Data structures and algorithms are independent of the implementation language. In fact, some instructors and authors present them using pseudocode or contrived non-existent programming languages, knowing that they can be translated into any general-purpose programming language.
Consider the fact that a compiler for a high-level programming language translates your high-level language data structures and algorithms either directly into machine language into assembly language. If data structures and algorithms couldn’t be expressed in assembly language (or in machine language), this would be impossible.
Manual Implementation in assembly language takes more effort than using a high-level language, but it can certainly be done. In fact, if it weren’t possible, we wouldn’t have been able to implement the first compilers for high-level languages, which were implemented by necessity in assembly language. Compilers are chock-full of data structures and algorithms. And most early operating systems were implemented in assembly language. Operating systems are brimming with data structures and algorithms.