The first two objects (data structures and OOP) seem to have a dependency - you must understand OOP before entering Data Structures.
The last question (assembly language and computer architecture) will be fine at the same time as Data Structures, but I would take a basic programming class and study OOP before diving into the assembly.
For reference, this is the structure that my school honors program runs (and it has been wonderful so far):
1st Semester: Data Structures and Algorithms Intro to Logic 2nd Semester: Intro to Computer Architecture Discrete math 3rd Semester: Advanced Computer Architecture Application of theory(ex compression, encryption, error correction) Programming languages 4th Semester: Operating Systems(done in x86, uses MIT course material) - challenging but very fun and rewarding class Sometime after 4th semester: Algorithms or Automata Theory
After the fourth semester at my school, you can pretty much take whatever you want (as a student with honors) - most people take gradient classes at that moment.
My point is to demonstrate that my school uses a two-track theory model (logic, discrete coincidence, etc.) and implementation (architecture, operating systems, etc.). If you're interested in CS, it's important to be well prepared in both. You need both to understand the theory and how to implement it in order to be a good "well-rounded" scientist-programmer.
My advice will follow a similar model. Take classes of architecture, but also take classes of theory.
Mike
source share