#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
struct Student {
int id;
char name[16];
Student* next;
};
Student m_head = {0};//定义了一个有头结点
void add(Student* obj) { //添加一个对象,插入一个对象
obj->next = m_head.next;
m_head.next = obj;
}
//也可以把对象附加到末尾
/*void add(Student* obj)
{
Student* p = &m_head;
while(p->next)
p = p->next;//找到最后一个对象
p->next = obj;//把obj挂在最后一个对象后面
obj->next = NULL;//现在obj作为最后一个对象
}*/
//用户输入数据
//返回值,0个成功;-1表示用户输入有误
int user_input(Student* obj) {
printf("学号");
scanf("%d",&obj->id);
printf("姓名");
scanf("%s",obj->name);
return 0;
}
//有头链表的遍历 在遍历的时候不包含头结点
void show_all()
{
Student* p = m_head.next;
while(p)
{
printf("ID: %d, name: %s\n",p->id,p->name);
p = p->next;//下一个对象
}
}
int main() {
//链表中的对象一般都是动态创建的,注意
//动态创建对象的生命周期,自malloc之时生效,到free之后失效
while(1) {
Student* obj_1 = (Student*)malloc(sizeof(Student));
// obj->id = 12;
// strcpy(obj->name,"X");
if(user_input(obj_1)==0)
{
add(obj_1);
}
else
{
free(obj_1);
}
printf("aaaa\n");
}
return 0;
}