#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;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)