עבור לתוכן

הסבר על מחסניות ב-C

Featured Replies

פורסם

למישהו יש? אני מבקש רק בגלל שהמורה לא ממש יודע להסביר על זה.

אם יש בעברית אדרבה, אבל אם אין גם אנגלית טוב.

פורסם

למדת תור, כי אם כן, אז זה בידיוק ההפך!

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

פורסם
  • מחבר

למדתי מחסניות לא תור

תודה על הסמל(תרתי משמע ;D)

פורסם

מחסנית זה מערך בלתי מוגבל

מתי שאתה מכניס איברים למחסנית הם יצאו בסדר ההפוך

הראשון שנכנס יוצא אחרון, האחרון שנכנס יוצא ראשון....

אפשר להשתמש במחסנית לתרגיל כמו מגדלי הנוי למי שמכיר

פורסם

מחסנית זה מערך בלתי מוגבל

מתי שאתה מכניס איברים למחסנית הם יצאו בסדר ההפוך

הראשון שנכנס יוצא אחרון, האחרון שנכנס יוצא ראשון....

אפשר להשתמש במחסנית לתרגיל כמו מגדלי הנוי למי שמכיר

מחסנית זה לא מערך בלתי מוגבל.. אתה מתבלבל בין הגדרת מחסנית למימוש צפציפי שבחרת.... יש מימושים של ARRAY מוגדר מראש (ומוגבל), או DYNAMIC ARRAY, או LINKED LIST.... (הכל תלוי בדרישת הפרויקט)..

פורסם

אני מדבר על הדינמי

בשביל להשתמש במחסנית לא דינמית?

אה בעצם יש מצב שצריך... אבל אפשר להגביל מחסנית גם כשהיא דינמית עם IF פשוט...

פורסם

אני מדבר על הדינמי

בשביל להשתמש במחסנית לא דינמית?

אה בעצם יש מצב שצריך... אבל אפשר להגביל מחסנית גם כשהיא דינמית עם IF פשוט...

כשתלמד על סיבוכיות המימושים השונים של מחסנית, תדע למה צריך...

פורסם

אם אתה מתכוון להקצאה דינמית זה אמור להיראות כך:

main()

{

int n;

int *a;

printf("enter array size: ");

scanf("%d", &n);

if (n>0)

a=(int *)malloc(n*sizeof(int));

...

הסבר ההקצאה:

אם גודל המערך הוא n וגודל כל משתנה במערך הוא (sizeof(int (במקרה הזה 4-int) אז מספר הבתים שיש להקצות למערך הוא  (n*sizeof(int

אחרי השורה האחרונה a הוא מערך... ...[a[0], a[1], a[2

ה- (int *) זה המרה של טיפוס הפוינטר. בעיקרון malloc מחזירה פוינטר סתמי מטיפוס *void ... אבל זה לא חשוב..

הפונקציה malloc שזו הפונקציה שאתה צריך היא נמצא או ב stdlib.h או ב malloc.h

הערה:

כל אחד מהטיפוסים הבאים תופס:

double-8

int-4

char-1

...

פורסם

ברוך הבא לפורומים, אבל מה שהבאת פה זה קוד שבכלל לא קשור למחסנית.. בסה"כ אתה עושה פה הקצאת זכרון... אין פה סממן אל מחסנית (כמו POINTER לנתון האחרון במחסנית וכו', פקודות PUSH ו POP).. וגם המימוש די מגביל אותך (הוא לא גנר'י מספיק), וגם יש עוד צורות מימוש דינמיות כמו LINKED LIST....

פורסם

הבאתי כאן דוגמא להקצאה דינמית לא למחסנית... מחר שאני לא יהיה כלכך עייף אני אתן דוגמא להקצאה דינמית עם מחסנית (בדיוק זה שיעורי הבית שלי ליום ראשון)

פורסם

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

יצא קצת מסובך

פורסם
  • מחבר

אני לא חושב שהסברתי את עצמי ממש נכון

התכנתי לרקורסיה :smile1:

אבל תודה בכל מקרה

פורסם

רקורסיה או מחסנית?

פורסם
  • מחבר

רקורסיה עם מחסניות

אני חושב

אם לא, אז רק רקורסיה

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים