נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: רשימות מקושרות

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
rubingr
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 01 February 2010
מדינה: Israel
משתמש: מנותק/ת
הודעות: 18
נשלח בתאריך: 16 March 2010 בשעה 10:13 | IP רשוּם
ציטוט rubingr

היי

אני ממש מחסנית על ידי שימוש ברשימה מקושרת דו כיוונית.
פעולת הPUSH עובדת אבל פעולת הPOP לא עובדת לי אני מכניס לדוגמא שני מספרים (1,2)ואני רוצה להציא אותם אבל מה שיוצא לי בPOP זה הספרה 1 ובשני מספר "זבל" אני צריך עזרה לדעת היכן הטעות שלי הקוד:
int pop()
{
    int value;
    element *elem;
    elem=head;
   
    elem->prev=NULL;
    value=elem->data;
   
    free(elem);
   
    return (value);
חזרה לתחילת העמוד הצג את כרטיס החבר של rubingr חפש הודעות אחרות של rubingr
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 16 March 2010 בשעה 20:17 | IP רשוּם
ציטוט shoshan

קודם כל לא שלחת את הקוד של push...

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

שים לב שאתה לא עושה שום פעולה על head אבל משחרר את הזכרון שלו בסוף...

משמע שה-head שלך מצביע לזכרון משוחרר...

צריך לעשות איתו משהו כדי שיצביע לאיבר הקודם ברשימה...

שוב, זה מאוד תלוי באיזה מימוש בחרת לממש מחסנית בעזרת הרשימה...


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
rubingr
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 01 February 2010
מדינה: Israel
משתמש: מנותק/ת
הודעות: 18
נשלח בתאריך: 16 March 2010 בשעה 23:33 | IP רשוּם
ציטוט rubingr

היי
זאת התוכנית של PUSH וPOP:
קוד:
typedef struct element
{
    int data;
    struct element*next;
    struct element*prev;
}element;

element *head=NULL;
element *prev=NULL;

int push(int x)
{
    element *elem;
    elem=(element*)malloc(sizeof(element));
    if(elem==NULL)
    {
        return 0;
    }
    elem->data=x;
    elem->prev=NULL;
    elem->next=head;
    if (head!=NULL)
    {
        return 0;
    }
   
    head=elem;
    return 1;
}
int pop()
{
    int value;
    element *elem;
    elem=head;
    //head=elem->next;
    elem->prev=NULL;
    value=elem->data;
   
    free(elem);
   
    return (value);

חזרה לתחילת העמוד הצג את כרטיס החבר של rubingr חפש הודעות אחרות של rubingr
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 17 March 2010 בשעה 00:58 | IP רשוּם
ציטוט shoshan

אוקיי - ה-push סבבה, כל ה-prevים ממש מיותרים - אתה הרי לא משתמש בהם...

אם תוריד את ההערה מ-head=elem->next; זה פועל ?

כי זה נראה די סבבה...


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
rubingr
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 01 February 2010
מדינה: Israel
משתמש: מנותק/ת
הודעות: 18
נשלח בתאריך: 17 March 2010 בשעה 09:38 | IP רשוּם
ציטוט rubingr

הורדתי את ההערה, הרצתי וקיבלתי Access violation על אותה שורה שאני הורדתי את ההערה?

חזרה לתחילת העמוד הצג את כרטיס החבר של rubingr חפש הודעות אחרות של rubingr
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 17 March 2010 בשעה 13:48 | IP רשוּם
ציטוט shoshan

תוריד גם את הקוד הבא:

קוד:
if (head!=NULL)
    {
        return 0;
    }


נראה לי שזה יפתור את זה...

וגם אולי תוסיף בהתחלה של POP בדיקה אם head הוא NULL כדי לוודא שזה לא בגלל זה..?


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

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

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה