c 语言链表存储
typedef struct node{
char name[20];
char rq[20];
int fen;
int age;
struct node *next;
}Student;
求链表的长度
int changdu(Student *head){
int cd=0;
Student *xin=head;
while(xin->next!=NULL){
xin=xin->next;
cd++;
}
return cd;
}
创建链表
Student* chuangjian(int n)
{
Student *head = new Student;
Student *pre = head;
for (int i = 0; i < n; i++)
{
Student *p = new Student;
printf("请输入第%d个学生:", i + 1);
printf("请输入学生姓名:");
scanf("%s",&p->name);
printf("请输入日期:");
scanf("%s",&p->rq);
printf("请输入学生得分:");
scanf("%d",&p->fen);
printf("请输入学生年龄:");
scanf("%d",&p->age);
// cin >> p->name >>p->rq >>p->fen >> p->age;
pre->next = p;
pre = p;
pre->next = NULL;
}
return head;
}
显示
void Cout(Student *head)//显示链表
{
Student *p = head->next;
while (p!=NULL){
printf("姓名:");
printf("%s",p->name);
printf(",");
printf("日期:");
printf("%s",p->rq);
printf(",");
printf("得分:");
printf("%d",p->fen);
printf(",");
printf("年龄:") ;
printf("%d",p->age);
printf("\n");
// cout <<"姓名:"<< p->name << "," <<""<<"日期:"<< p->rq << "," <<"得分:"<< p->fen << "," <<"年龄:"<< p->age<<endl ;
p = p->next;
}
}
添加信息
void tianjia(Student *head)//添加新节点
{
printf("请输入添加节点的位置:");
int index;
scanf("%d",&index) ;
if(index>changdu(head)||index<0){
printf("范围错误");
//break;
throw"out of range" ;
}
index=index-1;
Student *xin=head;
for(int i=0;i<index;i++){
xin=xin->next;
}
Student *newNode=new Student;
printf("请输入新节点的姓名:");
scanf("%s",&newNode->name );
printf("请输入新节点的日期:");
scanf("%s",&newNode->rq );
printf("请输入新节点的得分:");
scanf("%d",&newNode->fen );
printf("请输入新节点的年龄:");
scanf("%d",&newNode->age );
newNode->next=xin->next;
xin->next =newNode;
// return head;
}
修改节点链表内容
void xiugai(Student *head)//修改节点
{
printf("请输入修改节点的位置:");
int index;
scanf("%d",&index) ;
if(index>changdu(head)||index<0){
printf("范围错误");
//break;
throw"out of range" ;
}
Student *xin=head;
for(int i=0;i<index;i++){
xin=xin->next;
}
// Student *newNode=new Student;
printf("请输入修改节点的姓名:");
scanf("%s",&xin->name );
printf("请输入修改节点的日期:");
scanf("%s",&xin->rq );
printf("请输入修该节点的得分:");
scanf("%d",&xin->fen );
printf("请输入修改节点的年龄:");
scanf("%d",&xin->age );
// newNode->next=xin->next;
// xin->next =newNode;
// return head;
}
删除链表内容
void shanchu(Student *head){//删除学生
printf("请输入删除节点的位置:");
int index;
scanf("%d",&index);
if(index>changdu(head)||index<0){
printf("范围错误");
//break;
throw"out of range" ;
}
index=index-1;
Student *xin=head;
for(int i=0;i<index;i++){
xin=xin->next;
}
Student *p=xin->next;
xin->next=xin->next->next;
// delete p;
}
显示菜单
void menu(void)
{
printf("/*************学生管理系统****************/\r\n");
printf("\r\n");
printf(" *********** 1、查询学生信息 ***********\r\n");
printf(" *********** 2、增加学生信息 ***********\r\n");
printf(" *********** 3、删除学生信息 ***********\r\n");
printf(" *********** 4、修改学生信息 ***********\r\n");
printf(" *********** 5、展示学生信息 ***********\r\n");
printf(" *********** 0、退出学生管理系统 *******\r\n");
printf(" ****** 请输入对应的操作指令(1-5) ******\r\n");
printf("\r\n");
printf("/****************************************/\r\n");
}
主函数
int main(){
int n=3;
int cd;
Student *head=chuangjian(n);
int num;
while (1){
menu(); //菜单界面
scanf("%d", &num); //获取操作命令
if (num >= 0 && num <= 5){ //判断操作命令是否有效
switch (num) //对有效命令做出响应
{
case 0: printf("退出成功!\r\n"); return 0; //退出
case 1: Cout(head); break; //查看
case 2: tianjia(head); break; //添加
case 3: shanchu(head); break; //删除
case 4: xiugai(head); break; //修改
case 5: Cout(head); break; //展示
}
}
else{ //提示错误信息
printf("输入错误,请重新输入\r\n");
}
}
return 0;
}