有头链表的创建

#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;
}

猜你喜欢

转载自www.cnblogs.com/chuxinbubian/p/10668400.html