租房子网站怎么做,wordpress腾讯云搭建网站,吉林省建设工程管理系统,没备案的网站百度收录总体思路都能写出来#xff0c;问题是感觉稍微比之前的麻烦一些#xff0c;在刚开始创建结构体的时候#xff0c;并没有去按照链表的思路去写#xff0c;导致写成了顺序表#xff0c;后面就一直纠结空间怎么开辟。 链表是由一个头节点和其它申请出来的小节点连起来的… 总体思路都能写出来问题是感觉稍微比之前的麻烦一些在刚开始创建结构体的时候并没有去按照链表的思路去写导致写成了顺序表后面就一直纠结空间怎么开辟。 链表是由一个头节点和其它申请出来的小节点连起来的需要分开开辟空间然后进行连接等等的操作。需要先申请节点为了方便就封装一个申请节点的函数然后再实现功能的时候去调用就行 还有一个点在后期遇到一个问题不管我输入什么东西打印数据的时候我的最后一个数据不知道为什么会一直加一后面发现是我在声明变量的时候写了ClassPtr Class然后这个Class和我结构体的Class冲突了但是很奇怪并没有报错但是确实是这个问题导致我的代码输出时候莫名增1不是很懂。以后定义变量的时候还是得尽量避免重复吧反正这次重复了并没报错也没警告但是代码就是功能实现有问题记录一下吧。
//link_list.h
#ifndef LINK_LIST_H
#define LINK_LIST_H
#includestdio.h
#includestring.h
#includestdlib.h
#includemath.h#define MAX 100//学生信息
typedef struct Stu
{char name[20];int age;double score;
}Stu,*StuPtr;//班级管理
typedef struct Class
{Stu student;int len;struct Class *next;
}Class,*ClassPtr;//创建管理视图
void create_view();//创建班级链表
ClassPtr link_class_create();//申请学生信息结点
ClassPtr link_apply_node(Stu student);//头插 插入学生信息
int link_insert_student(ClassPtr Class,Stu student);//遍历学生信息
int link_printf_student(ClassPtr Class);//按位置查找学生结点
ClassPtr link_search_student_pos(ClassPtr Class,int pos);//按位置插入学生信息
int link_insert_student_pos(ClassPtr Class,int pos,Stu student);#endif
//link_list.c
#include link_list.h//创建管理视图
void create_view()
{printf(\t\t1.创建班级\n);printf(\t\t2.录入学生信息\n);printf(\t\t3.输出所有学生信息\n);printf(\t\t4.按位置插入学生信息\n);printf(\t\t5.销毁班级\n);printf(\t\t0.退出\n);
}//创建班级链表
ClassPtr link_class_create()
{ClassPtr class_ptr (ClassPtr)malloc(sizeof(Class)); //在堆区申请空间if(class_ptr NULL){printf(班级链表创建失败\n);return NULL;}class_ptr-len 0;class_ptr-next NULL;printf(班级创建成功\n);putchar(10);return class_ptr;
}//申请学生信息结点
ClassPtr link_apply_node(Stu student)
{ClassPtr p (ClassPtr)malloc(sizeof(Class));if(p NULL){printf(结点创建失败\n);return NULL;}p-student student;p-next NULL;return p;
}//头插 插入学生信息
int link_insert_student(ClassPtr class_ptr,Stu student)
{if(class_ptr NULL){printf(插入失败\n);return -1;}ClassPtr p link_apply_node(student);p-next class_ptr-next;class_ptr-next p;class_ptr-len;printf(插入成功\n);return 0;
}//遍历学生信息
int link_printf_student(ClassPtr class_ptr)
{if(NULL class_ptr){printf(遍历失败\n);return -1;}ClassPtr q class_ptr-next;while(q){printf(%s\t%d\t%.2lf\n,q-student.name,q-student.age,q-student.score);q q-next;}putchar(10);return 0;
}//按位置查找学生结点
ClassPtr link_search_student_pos(ClassPtr Class,int pos)
{if(NULL Class || pos 0 || pos Class-len){printf(查找失败\n);return NULL;}ClassPtr q Class;for(int i 0;i pos;i){q q-next;}return q;
}//按位置插入学生信息
int link_insert_student_pos(ClassPtr class_ptr,int pos,Stu student)
{if(NULL class_ptr){printf(插入失败\n);return -1;}ClassPtr p link_apply_node(student);ClassPtr q link_search_student_pos(class_ptr,pos-1);p-next q-next;q-next p;class_ptr-len;printf(插入成功\n);return 0;
}
//main.c
#include link_list.h
int main(int argc, char const *argv[])
{int n 0,pos 0;ClassPtr class_ptr;Stu student;while(1){create_view();printf(请输入您需要实现的功能:);scanf(%d,n);getchar();switch (n){case 1:class_ptr link_class_create();break;case 2:printf(请输入你需要插入的学生姓名:);scanf(%s,student.name);printf(请输入你需要插入的学生年龄:);scanf(%d,student.age);printf(请输入你需要插入的学生成绩:);scanf(%lf,student.score);getchar();link_insert_student(class_ptr,student);break;case 3:printf(姓名\t年龄\t成绩\n);link_printf_student(class_ptr);break;case 4:printf(请输入你需要插入第几个位置:);scanf(%d,pos);printf(请输入你需要插入的学生姓名:);scanf(%s,student.name);printf(请输入你需要插入的学生年龄:);scanf(%d,student.age);printf(请输入你需要插入的学生成绩:);scanf(%lf,student.score);link_insert_student_pos(class_ptr,pos,student);break;case 0:goto END;break;default:break;}}END:return 0;
}输出结果如下