【发布时间】:2021-03-14 21:35:52
【问题描述】:
所以这是我的麻烦,我正在尝试制作C 中的双链表。 但我无法正确添加学生,程序一直在崩溃。 我想做两个函数,一个在头部添加,一个在尾部添加。
希望有人能帮我解决这个问题!准备二叉树,圈出列表考试,所以我想我会从这个开始。 谢谢!
'''
typedef struct student
{
char *ime;
char *prezime;
char *brIndeksa;
int godStudija;
float prosek;
struct student *next;
struct student *prev;
}Student;
Student *NewStudent ();
void AddOnHead ( Student **p );
int main()
{
int n, i; printf("Broj studenata: "); scanf("%d", &n);
Student *studenti = NULL;
for ( i = 0; i < n; i++ )
AddOnHead(&studenti);
Print(studenti);
PrintFloat(studenti,7.5);
return 0;
}
Student *NewStudent ()
{
Student *newStudent;
newStudent = (Student*)malloc(sizeof(Student));
if ( newStudent == NULL )
{
printf("ERROR: Greska u alokaciji memorije. \n");
exit(1);
}
char txt[50];
printf("PODACI: \n");
printf("IME: ");
scanf("%s", txt);
newStudent->ime = (char*)malloc(strlen(txt)+1);
if ( newStudent->ime == NULL )
{
printf("ERROR: Greska u alokaciji memorije. \n");
exit(1);
}
strcpy(newStudent->ime,txt);
printf("PREZIME: ");
scanf("%s", txt);
newStudent->prezime = (char*)malloc(strlen(txt)+1);
if ( newStudent->prezime == NULL )
{
printf("ERROR: Greska u alokaciji memorije. \n");
exit(1);
}
strcpy(newStudent->prezime,txt);
printf("BROJ INDEKSA: ");
scanf("%s", txt);
newStudent->brIndeksa = (char*)malloc(strlen(txt)+1);
if ( newStudent->brIndeksa == NULL )
{
printf("ERROR: Greska u alokaciji memorije. \n");
exit(1);
}
strcpy(newStudent->brIndeksa,txt);
printf("GODINA STUDIJA: ");
scanf("%d", newStudent->godStudija);
printf("PROSEK: ");
scanf("%f", newStudent->prosek);
newStudent->next = NULL;
newStudent->prev = NULL;
putchar('\n');
return newStudent;
}
void AddOnHead ( Student **p )
{
Student *novi = NewStudent();
if ( *p == NULL )
*p = novi;
else
{
Student *tmp = *p;
tmp->prev = novi;
novi->next = tmp;
tmp = novi;
}
}
'''
【问题讨论】:
-
在这样的 scanf 调用中 scanf("%d", newStudent->godStudija);你必须使用像 scanf("%d", &newStudent->godStudija); 这样的指针
-
在函数 AddOnHead 你必须写 *p = novi;而不是 tmp = novi;
-
哦!太感谢了。我忽略了那一点,它现在有效。万事如意!
-
注意如果你有一个双向链表,那么你应该再声明一个包含至少两个指针的结构:指向头节点和尾节点。
-
你的意思是这样的吗? ``` structstudenti{ 字符 *ime,*prezime,*br_ind;诠释戈迪纳;浮动散文; }; structlista{` structstudenti *glava;结构列表 *rep; }; ```
标签: c struct linked-list doubly-linked-list function-definition