Topic 1 – Introduction to Data Structures
Why Data Structures?
If you are taking this class, then you would already have some programming experience, and at least one class in a high level language (C++, Java). Programming is more than just the ability to write code. This course introduces you to the fundamental concepts of writing good code and should give you a solid foundation as a programmer. There are a lot of good answers as to why this class is so important to CS and IT professionals – it is a good idea to know why this is important – these 2 links will provide you with that information from 2 different points of view.
A general idea of their importance from the point of view of a professor – https://www.quora.com/Why-are-data-structures-and-algorithms-so-important-in-computer-science
And of course you should be concerned with getting a job – read this and the responses from professionals who hire programmers – http://programmers.stackexchange.com/questions/102041/why-are-data-structures-so-important-in-interviews
Textbook and Reading Materials
This site will take you through the fundamentals of course. Reading materials will be linked with the various topics of the course. There will also be included reference links for many topics that will allow you to explore them in depth. I use Wikipedia articles extensively – they are normally very well-written for most Computer Science articles, and when not – I can modify them. If I link to an article, please consider it reference and important – meaning I will probably use it in quizzes and assignments.
Programming
The course will require extensive programming which we will do in Javascript. Note that the versions of the textbook have versions in psuedo-code, java and c++. We will use Javascript due to a number of reasons, one of which is the ability to use JSFiddle and be able to submit your code as a web link to the actual code. You will need a JSFiddle account – http://jsfiddle.net/
Data Structures and Primitives
A primitive in computer programming is an element that can NOT be broken into smaller elements. For most languages a character, integer, or a floating point number would be considered primitives. A string in some languages is represented as an array of characters. In this case the string is not a primitive, but is actually a data structure made up of primitives (characters). In turn an array of strings would be a data structure made up of less complex data structures. The ability to build structures that have the ability to be useful to the programmer is one of the fundamental principles of computer science and programming. You must have an ability to build data structures and use common structures.
Complexity
There are 2 primary types of complexity we will deal with in this course Space Complexity and Time Complexity. The easiest way to think about this is in the extreme. A computer program that needs more memory (space) than is available will not be able to run. A computer program that freezes the computer into what appears to be an infinite loop of calculations because the number of calculations is too large – is also not tremendously useful. Computer science has excellent ways to represent both time and space complexity. You must have an ability to analyze algorithms and programs for both time and space complexity – and represent them in standardized notation.
The discussion on the wikibook https://en.wikibooks.org/wiki/Data_Structures/Asymptotic_Notation is more than sufficient to understand both Asymptotic Notation which is how we present complexity. Big O Notation will be used nearly exclusively in this class to represent complexity, it will be used quite a bit.
Definitions (as we progress through the class – you will suggest adding words to the definition list)
Psuedocode
An English like representation of code that is used to describe an algorithm.
Wikipedia article on Pseudocode – http://en.wikipedia.org/wiki/Pseudocode
Algorithm
A step by step procedure used to achieve a specific objective or create a desired result.
A process or set of rules to be followed in calculations or other problem-solving operations, especially by a computer.
Wikipedia article on algorithm – http://en.wikipedia.org/wiki/Algorithm