yazdırmaya çalışırken çöküyor Bu yüzden bir program üzerinde çalışıyorum, sonunda ördek ördek kaz (aslında profesör tarafından ördek ördek önyükleme denir) bir gevşek sürümünü simüle edecek. Sorunu okurken dairesel bağlantılı liste bana doğru atılan şeydir. Genelde bağlantılı listeleri kullanmama rağmen çok yeni.Dairesel Bağlantılı liste
Program, düğümleri oluşturuyor ve ataıyor gibi görünüyor, ancak bunları yazdırmaya çalıştığımda çöküyorum.
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char name[20];
struct jimmysFriend *next;
} jimmysFriend;
jimmysFriend *createNode();
void populateList(jimmysFriend *bestFriend, int numberOfFriends);
//void duckDuckBoot();
void printList(jimmysFriend *bestFriend);
int main(void) {
int i;
int cases;
int numberOfFriends;
scanf("%d", &cases);
for (i = 0; i < cases; i++) {
scanf("%d", &numberOfFriends);
jimmysFriend *bestFriend; //head
bestFriend = NULL;
populateList(bestFriend, numberOfFriends);
printList(bestFriend);
}
return 0;
}
void populateList(jimmysFriend *bestFriend, int numberOfFriends) {
int i; //Where I actually create the circular list.
jimmysFriend *aFriend;
for (i = 0; i < numberOfFriends; i++) {
aFriend = createNode();
if (bestFriend == NULL) {
bestFriend = aFriend;
aFriend->next = aFriend;
} else
if (bestFriend != NULL) {
jimmysFriend *temptr;
aFriend->next = bestFriend;
temptr = bestFriend;
while (temptr->next != bestFriend) {
temptr = temptr->next;
}
temptr->next = aFriend;
}
}
}
jimmysFriend *createNode() { //Creates a node
jimmysFriend *aFriend;
aFriend = malloc(sizeof(jimmysFriend));
if (aFriend != NULL) {
scanf("%s", aFriend->name);
}
return aFriend;
}
void printList(jimmysFriend *bestFriend) { //Problem area?
jimmysFriend *temptr;
temptr = bestFriend;
while (temptr->next != bestFriend) {
printf("%s\n", temptr->name);
temptr = temptr->next;
}
}
Bağlantılı listenin yalnızca 1 öğe içerdiği durumlardan biri bariz bir sorundur. Bu durumda, "populateList", "bestFriend = aFriend;" ve "aFriend-> next = aFriend;" öğelerini ayarlar. Bu, printList'deki 'while' döngüsünün hiçbir şey yazdırmadan biteceği anlamına gelir. Genel olarak, 'while' döngüsünün listeden daha az bir giriş basacağı görülmektedir. – user3386109
@ user3386109 Söylediklerinizin ne anlama geldiğini görüyorum, sadece listenin yalnızca "printList" içinde bir öğe içerdiğini kontrol eden bir if ifadesi olması için iyi bir düzeltme olur mu? – Jude
2 fark ettiğim şeyler: 1) 'typedef struct' ->' typedef struct jimmysFriends' 2) 'aFriend = malloc (sizeof (jimmysFriend));' -> aFriend = (jimmysFriend *) malloc (sizeof (jimmysFriend)); ' – DimChtz