2016-04-11 31 views
0

Bir ad ve BST içeren yapıların bağlantı listesinin nasıl çalıştığını anlamakta sorun yaşıyorum. Anlama eksikliğimin bir örneği, bir düğümü listeden kaldırmak için nasıl bir işlev yazmaya çalıştığımı;Bağlantılı bir listedeki yapılara erişme

char courseName[100]; 
printf("Enter name of course to remove\n"); 
scanf("%s", &courseName); 
Course *deleteCourse = courseName; //definitely wrong, assuming something here to connect the input to the struct node goes here 
delete_from_list(&listcourses, Whatgoeshere); //I already have code for delete function 
//set bst of course to null 

ÜSTBİLGİ DOSYASINI KURSU BST İÇİN

typedef struct course{ 
char *name; 
BST students; 
} Course; 

typedef struct courseNode { 
Course data; 
struct courseNode *next; 
} *CourseList; 

ÜSTBİLGİ DOSYA

typedef struct bstNode { 
long student_id; 
struct bstNode *left; 
struct bstNode *right; 
} *BST; 

Ben: Ben silmek istediğiniz belirli düğüme kullanıcı girişi bağlamak anlamaya olamaz standart takma ve silme fonksiyonları zaten kurulmuş.

İkinci olarak, yapısal kursta BST'ye erişmek için nasıl giderim? Örneğin, bir öğrenci kimliğini "matematik" dersine ekleyerek. Sadece düğümlerin veri bölümündeki ints ve chars ile uğraşmak için kullanıyorum. Lütfen bana kod duvarları atmamayı dene, öğrenmeyi ve tekrar sormamayı tercih ederim. Zamanınız için teşekkürler

cevap

1

1) Kurs adına göre belirli bir düğümü silmek için, yeni Course türünde nesne (sadece hafıza kaybı) oluşturmanız gerekmiyorsa, silme düğümü işlevinize bir tane daha sarıcı yazabilirsiniz. Her bir düğüm üzerinde yineleyin ve numaralı kullanıcı dizgisini currentCourseNode->data.name ile karşılaştırın.

2) ayrıca düğüm silme başka bellek sızıntısı oluşturabilir Course.name, Course.students tarafından işaret bellek dealloc unutmayın bazı hususlara dikkat basit

(currentCourse.students)->student_id=xyz kadar student_id erişebilirler.

+0

satırınız için de 'Kurs * deleteCourse = courseName' olarak yazılabilir Kurs deleteCourse = {courseName, null} 'ama açıklandığı gibi gerek yok –

+0

Evet Benim fonksiyonumun çalışması gerekiyor: strcmp yapmaya çalışıyorum ama strcmp (current-> data, data), ilk parametre olarak "Course" türünde ve char değil. giriş arkadaşı için teşekkürler, bana bu konuda kötü bir çatlak var ve bana nerede –

+0

oooooh current-> data.name çalışıyor, görmek için doğru bir yol olduğunu düşünüyorum düşünmek için bir şey verdi? –