עבור לתוכן

רשימה מקושרת, עזרה שפת c

Featured Replies

פורסם

יש לי בעיה קשה קשה ברשימות מקושרות, זהו חלק מתוכנית שכתבתי וכל מה שכרגע אני רוצה לדעת זה איך אני מכניס לרשימה תעודת זהות שכל ספרה תהיה באיבר אחד. מה שאני לא יודע זה בהתחלה של הfor המשתנה p=למה?, או שאולי אני בכלל לא מבין רשימות מקושרות?!



#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>


using namespace std;


typedef struct id
{
int data;
struct id *next;
}Node;




void main()
{
Node *head,*p;
Node *temp=(Node*)malloc(sizeof(Node));
if(!temp)
{
cout<<"no mem alocated\n";
return;
}


for(p=temp->; p->next!=NULL ; p=p->next)
{
cin>>p->data;
}
}

פורסם

ערוך בבקשה את הכותרת וכתוב בה את השפה שבה אתה עובד.

אי אפשר לצבוע קוד, פשוט תסמן בהערה או משהו כזה.

פורסם
  • מחבר

ערכתי

פורסם

סבבה.

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

פורסם
  • מחבר

סבבה.

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

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

חשבתי על זה אבל אני לא יודע איך ליישם את זה בדיוק

פורסם

זה בדיוק מה שאני אומר. אתה יודע איך מוסיפים איבר לרשימה מקושרת?

פורסם
  • מחבר

זה בדיוק מה שאני אומר. אתה יודע איך מוסיפים איבר לרשימה מקושרת?


[size=78%]
void main()
{
[/size]num *head=(num*)malloc(sizeof(num));
num *p=head;
while (p!=NULL)
{
num *next=(num*)malloc(sizeof(num));
cout<<"enter a number: ";
cin>>p->data;
p=p->next;
}
sum;
}

זה לא עובד לי.....הוא מוציא שגיאה בריצה

פורסם

אני אחזור ואשאל:

אתה יודע איך מוסיפים איבר לרשימה מקושרת?

פורסם
  • מחבר

בעיקרון כן אבל לא נראה לי..

מה אתה אומר על זה? פה הוא יוצר לי רק שתי מקומות במקום 9


[size=78%]
void main()
{
num *head;
head=(num*)malloc(sizeof(num));
cout<<"enter first digit: ";
cin>>head->data;
head->next=NULL;
for(int i=0;i<9;i++)
{
[/size] num*tmp;
tmp=(num*)malloc(sizeof(num));
cout<<"enter next digit: ";
cin>>tmp->data;
tmp->next=NULL;
head->next=tmp;
}
}

פורסם

אתה בכיוון, אבל עדיין לא מספיק טוב.

תנסה לצייר על דף ועט את הרשימה המקושרת: כל חוליה ברשימה היא מלבן עם שני חלקים - הראשון מכיל את המידע, והשני מכיל מצביע (חץ) לחוליה הבאה ברשימה, וכמובן head מצביע לחוליה הראשונה. תחשוב בכל איטרציה של הלולאה מה קורה בדיוק (ממש תצייר על דף כל שלב ושלב).

פורסם
  • מחבר

אני מבין למה אתה מתכוון אבל אני מתחרפן ואני לא מצליח ליישם את זה לא נופל לי האסימון זה מחרפן אותי.

פורסם
  • מחבר

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

פורסם
  • מחבר

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>


using namespace std;


typedef struct id
{
int data;
struct id *next;
}num;


int sum(num*head)
{
int result=0;
num *p=head;
while (p!=NULL)
{
result=result+p->data;
p=p->next;
}
return result;
}


void print(num*head)
{
num *p;
p=head;
while(p->next!=NULL)
{
cout<<p->data;
p=p->next;
}
cout<<endl;
}


void add(num *head,int x)
{
num *id,*tmp;
id=(num*)malloc(sizeof(num));
id->data=x;
id->next=NULL;
tmp=head;
while(tmp->next!=NULL)
tmp=tmp->next;
tmp->next=id;
}


void mult(num*head,int n)
{
num*p=head;
while(p!=NULL)
{
p->data=(p->data)*n;
p=p->next;
}
}




void main()
{
num *head;
int x,n;
head=(num*)malloc(sizeof(num));
cout<<"enter first digit of your id: ";
cin>>head->data;
head->next=NULL;
num*tmp;
for(int i=0;i<8;i++)
{
cout<<"enter next digit: ";
cin>>x;
add(head,x);
}
cout<<"the id is: ";
print(head);
cout<<"the sum of the id is: ";
cout<<sum(head)<<endl;
cout<<"enter a digit to mult: ";
cin>>n;
mult(head,n);
cout<<"the new id is: ";
print(head);
}

פורסם

למה לא לנסות משהו כזה?

#include <iostream>

typedef struct id
{
int data;
struct id *next;
} num;

typedef struct linkedIDList
{
num *head;
num *last;

unsigned int numLinks;
} linkedIDList;

void attachNewLink(linkedIDList *list, int data)
{
num *newLink;

newLink = (num*)malloc(sizeof(num));
newLink->next = NULL;
newLink->data = data;

if(!list->head)
{
list->head = newLink;
list->last = newLink;
}
else
{
list->last->next = newLink;
list->last = newLink;
}

list->numLinks++;
}


void main()
{
linkedIDList list;
int digit;

list.head = NULL;

for(int i=0;i<9;i++)
{
std::cout << "enter next digit: ";
std::cin >> digit;

attachNewLink(&list, digit);
}
}

ארכיון

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

דיונים חדשים