โครงสร้างข้อมูล

ในสาขาวิทยาการคอมพิวเตอร์ โครงสร้างข้อมูล () เป็นวิธีการจัดเก็บข้อมูลในคอมพิวเตอร์เพื่อให้สามารถใช้งานได้อย่างมีประสิทธิภาพ บ่อยครั้งที่การเลือกโครงสร้างข้อมูลที่เหมาะสมจะทำให้เราสามารถเลือกใช้ขั้นตอนวิธีที่มีประสิทธิภาพไปพร้อมกันได้ การเลือกโครงสร้างข้อมูลนั้นโดยส่วนใหญ่แล้วจะเริ่มต้นจากการเลือกแบบชนิดข้อมูลนามธรรม โครงสร้างข้อมูลที่ออกแบบเป็นอย่างดีจะสามารถรองรับการประมวลผลที่หนักหน่วงโดยใช้ทรัพยากรที่น้อยที่สุดเท่าที่จะเป็นไปได้ ทั้งในแง่ของเวลาและหน่วยความจำ

โครงสร้างข้อมูลแต่ละแบบจะเหมาะสมกับงานที่แตกต่างกัน และโครงสร้างข้อมูลบางแบบก็ออกแบบมาสำหรับบางงานโดยเฉพาะ อย่างเช่น ต้นไม้แบบบีจะเหมาะสำหรับระบบงานฐานข้อมูล

ในกระบวนการออกแบบโปรแกรมคอมพิวเตอร์ การเลือกโครงสร้างข้อมูลเป็นสิ่งสำคัญอันดับแรกที่ต้องคำนึงถึง ซึ่งจากการพัฒนาระบบงานใหญ่ๆได้แสดงให้เห็นว่า ความยากในการพัฒนาและประสิทธิภาพของระบบจะขึ้นอยู่กับโครงสร้างข้อมูลที่เลือกใช้อย่างมาก หลังจากตัดสินใจเลือกโครงสร้างข้อมูลที่จะใช้แล้วก็มักจะทราบถึงขั้นตอนวิธีที่ต้องใช้ได้ทันที แต่ในบางครั้งก็อาจจะกลับกัน คือ การประมวลผลที่สำคัญๆของโปรแกรมได้มีการใช้ขั้นตอนวิธีที่ต้องใช้โครงสร้างข้อมูลบางแบบโดยเฉพาะ จึงจะทำงานได้เต็มประสิทธิภาพ ถึงอย่างไรก็ตาม ไม่ว่าจะเลือกโครงสร้างข้อมูลด้วยวิธีการใด โครงสร้างข้อมูลที่เหมาะสมก็เป็นสิ่งที่สำคัญมากอยู่ดี

แนวความคิดในเรื่องโครงสร้างข้อมูลนี้ส่งผล กับการพัฒนาวิธีการมาตรฐานต่างๆในการออกแบบและเขียนโปรแกรม หลายภาษาโปรแกรมนั้นได้พัฒนารวมเอาโครงสร้างข้อมูลนี้ไว้เป็นส่วนหนึ่งของระบบโปรแกรม เพื่อประโยชน์ในการใช้ซ้ำ

โครงสร้างข้อมูลชนิดอื่นๆ สามารถสร้างขึ้นมาได้ แต่มักแปรหรือ ประกอบขึ้นใหม่จากโครงสร้างข้อมูลข้างต้น

โครงสร้างข้อมูลเป็นสิ่งที่ตั้งอยู่บนพื้นฐานของความสามารถของคอมพิวเตอร์ในการรับและเก็บข้อมูล ณตำแหน่งใด ๆ ในหน่วยความจำ ซึ่งระบุโดยแอดเดรส (สตริงของบิตซึ่งสามารถเบในหน่วยความจำและจัดการได้โดยโปรแกรม ดังนั้นเรคคอร์ดและอาร์เรย์เป็นโครงสร้างข้อมูลที่ตั้งบนพื้นฐานการคำนวณแอดเดรสของรายการข้อมูลโดยใช้การดำเนินการทางคณิตศาสตร์ ในขณะที่โครงสร้างข้อมูลแบบเชื่อมโยง เป็นโครงสร้างข้อมูลที่ตั้งอยู่บนพื้นฐานของารเก็บแอดเดรสหน่วยความจำของรายการข้อมูลซึ่งอยู๋ในโครงสร้างของมันเอง โครงสร้างข้อมูลหลายชนิด สร้างขึ้นโดยใช้หลักการทั้งสองประการ หรือการดำเนินการ โครงสร้างขอมูลบางชนิดรวมวิธีทั้งสองด้วยวิธีการที่ยาก เช่น โครงสร้างข้อมูลแบบ XOR linking
การดำเนินการของโครงสร้างข้อมูล มักต้องารการเขียนเซตของฟังก์ชัน หรือเซตของการดำเนินการ (procedures) ซึ่งสร้างและดำเนินการกับอินสแตนท์ของโครงสร้างนั้น ประสิทธิภาพของโครงสร้างข้อมูล ไม่สามารถวิเคราะห์โดยการแยกการดำเนินการออก การสังเกตกระตุ้นแนวคิดเชิงทฤษฎีของชนิดข้อมูลนามธรรม โครงสร้างข้อมูลซี่งถูกนิยามโดยอ้อมจากการดำเนินการที่กระทำกับมัน และคุณสมบัติทางคณิตศาสตร์ของการดำเนินการเหล่านั้น

ภาษาแอสเซมบลีส่วนใหญ่ และภาษาระดับต่ำบางภาษา เช่น BCPL (Basic Combined Programming Language) ไม่สนับสนุนการมีโครงสร้างข้อมูล ภาษาโปรแกรมระดับสูงส่วนใหญ่และภาษาแอสเซมบลีระดับสูงบางภาษา เช่น MASM มีรูปแบบคำสั่งพิเศษ หรือ ฟังก์ชันบางอย่างที่สนับสนุนโครงสร้างข้อมูลเช่น เวกเตอร์ vectors (อาร์เรย์หนึ่งมิติ) ในภาษา C หรืออาร์เรย์หลายมิติในภาษา ปาสคาล (Pascal)
ภาษาโปรแกรมส่วนใหญ่ รวมส่วนสำคัญ ๆไว้โดยใช้กลไกไลบรารี ซึ่งช่วยให้โครงสร้างข้อมูลนั้นนำไปใช้ในโปรแกรมอื่น ๆ ได้ ภาษาโปรแกรมที่ทันสมัยมักมีไลบรารีมาตรฐานซึ่งมีโครงสร้างข้อมูลทั่วไปรวมอยู่ในภาษาด้วย ตัวอย่างเช่น Standard Template Library ของภาษา C++ Java Collections Framework และ Microsoft's .NET Framework เป็นต้น 
ภาษาโปรแกรมที่ทันสมัยมักสนับสนุนการเขียนโปรแกรมแบบโมดูล หรือการแยกอินเตอร์เฟซของโมดูลไลบรารี ออกจากการดำเนินการ บางภาษาจัดเตรียมชนิดข้อมูลที่ช่วยให้ผู้ใช้ซ่อนรายละเอียดการดำเนินการด้วย เช่น คลาสของภาษา C++ Java และ .NET Framework เป็นต้น 
โครงสร้างข้อมูลหลายตัวมีเวอร์ชันที่สามารถทำงานพร้อมกัน ซึ่งสามารถคำนวณหลาย ๆ เทร็ด (threads) ที่เข้าถึงโครงสร้างข้อมูลพร้อมกันได้