רשימה (מבנה נתונים)

רשימה (באנגלית: List או Sequence) היא מבנה נתונים מופשט שתוכנו בעל סדר חלקי ועשוי להכיל חזרות (כלומר עשויים להימצא בו מספר איברים שקולים). מימוש של רשימה הוא למעשה ייצוג ממוחשב של סדרה מתמטית סופית.

על פי רוב, מימוש רשימה במחשב ייעשה על ידי שימוש במערך או ברשימה מקושרת. שפות תכנות רבות כוללות מימוש כלשהו של רשימה, ושפות תכנות פונקציונליות או לוגיות (כמו Haskell או פרולוג) תומכות על פי רוב ברשימה כטיפוס בסיסי בשפה.

רשימה היא מבנה נתונים 'חלש', כלומר ניתן להתייחס למבני נתונים אחרים כאל רשימה לה נוספו הגבלות:
 קבוצה היא רשימה שמתעלמים בה מהסדר, ושלא מאפשרת חזרות (ייצוג של קבוצה מתמטית).
 מחסנית היא רשימה בה האיברים מסודרים לפי מועד הוספתם, וניתן לגשת רק לאיבר האחרון שנוסף אליה (LIFO).
 תור הוא רשימה בה האיברים מסודרים לפי מועד הוספתם, וניתן לגשת רק לפריט הראשון שנוסף אליה (FIFO).
 רשימה שבין איבריה לא מוגדר סדר היא הכללה של קבוצה ונקראת רב-קבוצה ("Multiset") או "Bag" (שק).

הגדרה מופשטת
רשימה מופשטת L עם איברים מסוג E כל שהוא (רשימה מונומורפית, מוגדרת בעזרת הפונקציות הבאות:

nil: () → L
cons: E × L → L
first: L → E
rest: L → L

והאקסיומות:

first (cons (e, l)) = e
rest (cons (e, l)) = l

לכל איבר e ברשימה l. יוצא מכך ש:

cons (e, l) ≠ l
cons (e, l) ≠ e
cons (e1, l1) = cons (e2, l2) if e1 = e2 and l1 = l2

שימו לב ש-first (nil ()) ו-rest (nil ()) אינם מוגדרים.

האקסימות הללו שקולות לאלו של מבנה הנתונים המופשט של המחסנית.

בתורת הטיפוסים, ההגדרה לעיל מוגדרת בפשטות כהגדרה אינדוקטיבית המוגדרת במונחי הבנאים: nil ו-cons. במונחים אלגבריים, ניתן לייצג זאת כהעתקה 1 + E × L → L.
ניתן ליצור את first ו-rest בעזרת תיאום דגמים על בנאי ה-cons, וטיפול נפרד במקרה של nil.

לקריאה נוספת
 מערך
 תור
 קבוצה

קישורים חיצוניים
 

ערכים שבהם תבנית בריטניקה אינה מתאימה
מבני נתונים