急!在线等, 数据结构单链表的插入信息这段代码有什么问题??

/*
实现单链表的基本功能:
1.	利用scanf输入5个学生信息并打印
2.	在第i个学生前面插入一个新的学生
3.	删除第i个学生
*/

#include<stdio.h>
#include<stdlib.h>


typedef struct student{
	int num;
	int phone;
	char name[10];
	struct student *next;
}struct_t;

int main(){
	
	int i=1,m,n;
	
	struct_t *p1;	
	struct_t *p2;
	struct_t *p3;
	struct_t *p4;
	struct_t *p5;
	struct_t *p6;

	printf("请输入5个学生的信息:\n");
	
	p5=(struct_t *)malloc(sizeof(struct_t));
	scanf("%s%d%d",p5->name,&p5->num,&p5->phone);
	p5->next=NULL;
	
	p4=(struct_t *)malloc(sizeof(struct_t));
	scanf("%s%d%d",p4->name,&p4->num,&p4->phone);
	p4->next=p5;
	
	p3=(struct_t *)malloc(sizeof(struct_t));
	scanf("%s%d%d",p3->name,&p3->num,&p3->phone);	
	p3->next=p4;
	
	p2=(struct_t *)malloc(sizeof(struct_t));
	scanf("%s%d%d",p2->name,&p2->num,&p2->phone);
	p2->next=p3;
	
	p1=(struct_t *)malloc(sizeof(struct_t));
	scanf("%s%d%d",p1->name,&p1->num,&p1->phone);
	p1->next=p2;
	
	
	struct_t *p=p1;

	printf("序号\t姓名\t学号\t电话号码\n");//输入5个学生信息后,输出学生的信息
	while(p != NULL){
		printf("%d\t%s\t%d\t%d\n",i,p->name,p->num,p->phone);
		p = p->next;
		i++;
	}
	
	
	//插入信息
	printf("在第几位学生前添加信息?\n");
	scanf("%d",&m);
	printf("请输入信息:\n");
	switch(m){
	case 1:{
		
		p6=(struct_t *)malloc(sizeof(struct_t));
		scanf("%s%d%d",p6->name,&p6->num,&p6->phone);
		p6->next=p1;
		   }break;
	case 2:{
		
		p6=(struct_t *)malloc(sizeof(struct_t));
		scanf("%s%d%d",p6->name,&p6->num,&p6->phone);
		p1->next=p6;
		p6->next=p2;
		   }break;
	case 3:{
		
		p6=(struct_t *)malloc(sizeof(struct_t));
		scanf("%s%d%d",p6->name,&p6->num,&p6->phone);
		p2->next=p6;
		p6->next=p3;
		   }break;
	case 4:{
		
		p6=(struct_t *)malloc(sizeof(struct_t));
		scanf("%s%d%d",p6->name,&p6->num,&p6->phone);
		p3->next=p6;
		p6->next=p4;
		   }break;
	case 5:{
		
		p6=(struct_t *)malloc(sizeof(struct_t));
		scanf("%s%d%d",p6->name,&p6->num,&p6->phone);
		p4->next=p6;
		p6->next=p5;
		   }break;
	default	:printf("无此学生\n");break;	
	}

	if(m != 1)
		struct_t *p=p1;
	else
		struct_t *p=p6;

	i=1;
	printf("序号\t姓名\t学号\t电话号码\n");//插入1位学生的信息后,输出学生的信息
	while(p != NULL){
		printf("%d\t%s\t%d\t%d\n",i,p->name,p->num,p->phone);
		p = p->next;
		i++;
	}
	

	//删除信息
	p=p1;
	printf("删除第几位学生的信息?\n");
	scanf("%d",&n);
	switch(n){
	case 1:{
		p1->next=NULL;p=p2;
		break;
		   }
	case 2:{
		p1->next=p3;p=p1;
		break;
		   }
	case 3:{
		p2->next=p4;p=p1;
		break;
		   }
	case 4:{
		p3->next=p5;p=p1;
		break;
		   }
	case 5:{
		p4->next=p6;p=p1;
		break;
		   }
	case 6:{
		p5->next=NULL;p=p1;
		break;
		   }
	default	:printf("无此学生\n");break;				
	}


     i=1;
	printf("序号\t姓名\t学号\t电话号码\n");//删除1位学生的信息后,输出学生的信息
	while(p != NULL){
		printf("%d\t%s\t%d\t%d\n",i,p->name,p->num,p->phone);
		p = p->next;
		i++;
	}
	
	
	
	
	
	
	free(p1);
	free(p2);
	free(p3);
	free(p4);
	free(p5);
	free(p6);
	
	
	return 0;
}


奕吉啊
浏览 948回答 1
1回答

陈十四

逻辑看着没问题啊??难道有什么问题吗
打开App,查看更多内容
随时随地看视频慕课网APP