c语言头动态链表,学生信息输入程序

c语言头动态链表,学生信息输入程序,第1张

c语言头动态链表,学生信息输入程序

#include
#include
#include
typedef struct {                        //建立学生信息结构体                       
char name[6];
int Student_number;
float score;
}student;


 struct node                        //建立链表节点结构体
{
student student_member;
struct node*next;
};    

typedef struct node  node_struct;   //先建立结构体,再使用typedef定义结构体类型

node_struct* Generate_head()    //结构体指针函数,返回结构体类型的地址。建立链表表头。
{  node_struct*head=(node_struct*)malloc(sizeof(node_struct));
head->next=NULL;
  return head;
}


node_struct*Generate_node(student data)    //建立链表的节点
{node_struct* node_member=(node_struct*)malloc(sizeof(node_struct));

//malloc给结构体指针分配地址,使其变成变量(指针需要给定地址)
  node_member->student_member=data;     //赋值
  return node_member;
}

void insert(node_struct* head,student data)   //采用头插法,将数据插入
{node_struct* head_insert=head;
node_struct* node_insert=Generate_node(data);
node_insert->next=head_insert->next;
head_insert->next=node_insert;
}

void display(node_struct* head)   .//输出链表的数据      
{node_struct* display_head=head;
node_struct*  pointer_move;
pointer_move=display_head->next;
while(pointer_move)
{
    printf(" %sn",(pointer_move->student_member).name);
    printf(" %dn",(pointer_move->student_member).Student_number);
    printf(" %fn",(pointer_move->student_member).score);
    pointer_move=pointer_move->next;
}

}

void  delete_node(char name[20],node_struct* head)    //删掉指定节点
{node_struct* delete_noden;
node_struct* delete_head=head;
node_struct* delete_fore;
delete_fore=head;
 delete_noden=head->next;
 while(strcmp((delete_noden->student_member).name,name ))  

//当某个节点的学生名字与我指定的学生名字一样,删除这个节点

//strcmp当两个字符串地址相同返回0;
 {   delete_fore=delete_noden;
     delete_noden=delete_noden->next;
}
delete_fore->next=delete_noden->next;
free(delete_noden);  //释放内存空间,使这块内存空间被别的变量调用
}

int main()
{ student  student_data;
 node_struct* head=Generate_head();
 char choice;  
 char student_name[20]="进";
while(1)
{printf("请输入学生信息n");
  scanf(" %s",student_data.name) ;
  scanf("%d",&(student_data.Student_number)) ;
  scanf("%f",&(student_data.score));
  insert( head,student_data);
printf("是否继续输入n");
scanf(" %c",&choice);
fflush(stdin);
while(1)
{
 if((choice=='n')||(choice=='N'))
{
    break;
}


if((choice=='y')||(choice=='Y'))
{
    break;
}
else if((choice!='y')||(choice!='Y'))
{
  printf("你输入的是错误的n");
  printf("是否继续输入n");
  scanf(" %c",&choice);  //输入的字母过多时,输入缓冲区有值,造成输入错误
  fflush(stdin);     //清空缓冲区
}

}

if((choice=='n')||(choice=='N'))

{
    break;
}
}
delete_node(student_name,head);   //删除学生名字与student_name一样的学生存储空间

//不使用的时候要屏蔽掉节点删除,不然程序运行时会因为死机。
display(head);
    printf("Hello world!n");
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5636409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存