dữ liệu và cấu trúc dữ liệu
+dữ liệu chủ yếu chứa trong RAM để xử lý
+RAM=kí tự +con trỏ
+về mặt vật lý RAM là 1 dãy các bit có thể truy xuất ngẫu nhiên
-dữ liệu cần phải xử lý:
+mã hóa
+sắp xếp:sắp xếp có thứ tự trong đĩa
+truy xuất: thêm xóa, sữa dữ liệu, tìm kiếm dữ liệu
+thuật toán:tìm đường đi ngắn nhất...
cấu trúc dữ liệu
là cách chúng ta tổ chức thông tin, để có thể tìm kiếm cập nhật thêm xóa, các phần của nó 1 cách hiệu quả
bao gồm các bước
-như thế nào để chứa tập đối tượng đối tượng vào bộ nhớ
-những thực thi nào được áp dụng lên dữ liệu
-thuật toán thực thi
-tiêu tốn bao nhiêu tài nguyên như thời gian không gian
kiểu dữ liệu
trong ngôn ngữ lập trình là tập các dữ liệu có giá trị đặc trưng đã được định trước
-số lượng bit của mỗi kiểu dữ liệu phụ thuộc vào trình biên dịch, hệ điều hành, ngôn ngữ lập trình
-khi kiểu dữ liệu không đủ, hầu hết các ngôn ngữ lập trình đều cho phép người dùng định nghĩa kiểu dữ liệu mới dựa trên kiểu dữ liệu có sẵn
phân biệt cấu trúc dữ liệu và kiểu dữ liệu
cấu trúc dữ liệu: 
-tập trung mô tả cách tổ chức dữ liệu
-mô tả ở mức phức tạp hơn
kiểu dữ liệu
-tập trung mô tả các giá trị có thể có
VD: struct{int x,y} vừa là kiểu dữ liệu mà cũng vừa là kiểu cấu trúc
kiểu dữ liệu trừu tượng
-gồm phần dữ liệu và phần thực thi, chỉ đi sâu vào mô tả chứ không đi vào  cách thức thực thi chi tiết trong code
-đặc điểm
+chứa dữ liệu và cho phép rất nhiều thực thi trên dữ liệu để truy xuất và thay đổi nó
+nó không hoàn toàn là lớp, nó giống như lớp trừu tượng hay giao diện
-mỗi kiểu dữ liệu trừu tượng như 1 bản hợp đồng
+xác định tập dữ liệu hợp lệ
+xác định thực thi: tên của nó loại tham số, loại kết quả trả về nếu có, cách cư xử có thể quan sát được của nó
-không xác định
+thể hiện dữ liệu
+thuật toán để thực hiện các thực thi
-ý nghĩa của kiểu dữ liệu trừu tượng
+giúp chia nhỏ bài toán
+che chi tiết thực thi: người sử dụng không cần biết chi tiết, chỉ cần biết nó làm được gì, người lập trình có thể thay thế thực thi mà không làm ảnh hưởng đến người sử dụng nó
-các kiểu dữ liệu trừu tượng phổ biến
+danh sách liên kết linked list
+ngăn xếp
+hàng đợi
+hàng đợi ưu tiên
+cây
+từ điển
+bảng băm
+ đồ thị
+tái sử dụng
bộ nhớ chính
-bộ nhớ RAM chứa rất nhiều ô nhớ, mỗi ô nhớ có kích thước 1 byte
-RAM dùng để chứa 1 phần hệ điều hành, các lệnh chương trình các dữ liệu
-tùy vào kiểu dữ liệu giá trị có thể chứa trên nhiều ô nhớ
+chương trình cần biết được địa chỉ ban đầu và kích thước
-ở hệ điều hành hiện đại, không gian bộ nhớ được cấp phát cho các chương trình thường được ảo hóa
+chứa 1 bảng ánh xạ virtual memory-> physical memory
+bảo vệ truy xuất bộ nhớ
-mỗi biến được xác định ở 1 địa chỉ ô nhớ
+có thể đọc ghi giá trị
+có thể chiếm nhiều ô nhớ liên tục dựa vào kiểu dữ liệu mà biến đó được khai báo
+có thời gian sống life time và phạm vi truy xuất nhất định
con trỏ
con trỏ thực ra chỉ là 1 biến
-nó cũng có 1 địa chỉ và giá trị
-nhưng giá trị này chứa địa chỉ
-khi mới được khai báo, biến con trỏ được đặt ở vị trí nào đó
+chứa giá trị không xác định
+trỏ đến vùng nhớ không được biết trước do đó không nên sử dụng con trỏ khi chưa khởi tạo vì chưa xác định địa chỉ mà nó trỏ tới có thật hay không
-khái niệm con trỏ NULL
+con trỏ NULL là con trỏ không trỏ đi đâu cả. nó khác với con trỏ khi chưa được khởi tạo
+tham chiếu ngược sẽ gây ra lỗi thực thi
– Các phép toán số học trên con trỏ. – Sử dụng con trỏ để cấp phát động mảng n chiều. – Con trỏ đa cấp – Mảng con trỏ – Con trỏ cấu trúc. – Con trỏ chuỗi. – Con trỏ hàm – Con trỏ file