初学链表的问题
#include<stdio.h>
#include<stdlib.h>
typedef struct std //学生的数据结构类型
{ int no;
char stunum[10];
char stuname[10];
char sex[5];
}stu;
typedef struct Node// 单链表的结点类型
{
stu data;
struct Node *next;
}LNode, *LinkList;
LinkList L; //定义头指针
stu s1;
char str[81];
void CreateList(LinkList L)
{
LinkList p,q;
FILE *fp;
//int i;
if((fp=fopen("abc.txt","r"))==NULL)
{
printf("打开文件失败,请检查路径设置!\n\n");
exit(1);
}
fgets(str,81,fp);
printf("\t%s\n",str);
L=(LinkList)malloc(sizeof(LNode));
if(L==NULL)
{
printf("失败 !");
exit(0);
}
L->next=NULL;
q = L;
while(!feof(fp))
{
p=(LinkList)malloc(sizeof(LNode));
if(p==NULL)
{
printf("失败 !");
exit(0);
}
p->next=NULL;
fscanf(fp,"%d%s%s%s%s%d%d%d",&p->data.no,p->data.stunum,p->data.stuname,p->data.sex);
q->next = p;
q = p;
}
fclose(fp);
printf("\n");
p=L->next;
while(p!=NULL)
{
printf("\t%d\t%s\t%s\t%s\t%s\t%d\t%d\t%d\n",p->data.no,p->data.stunum,p->data.stuname,p->data.sex);
p=p->next;
}
printf("创建成功!\n");
}
//删除记录
void ListDelete(LinkList L,int i)
{
int num;
int j=1;
LinkList p,q;
q=(LinkList)malloc(sizeof(LNode));//申请结点空间
p=L->next;
printf("请输入要删除的学生的编号:\n");
scanf("%d",&num);
while(p!=NULL);
{
if(p->data.no==num &&p->next!=NULL) /*怎么解决p->next为空时候的情况?即删除最后一条记录的时候*/
{
p=p->next;//找结点并删除
}
printf("\t%d\t%s\t%s\t%s\t%s\t%d\t%d\t%d\n",p->data.no,p->data.stunum,p->data.stuname,p->data.sex);
p=p->next;
}
}
//主函数
void main()
{
int i;
while(1)
{
printf("******学生成绩管理系统******\n");
printf("****1.创建链表 ******\n");
printf("****2.删除记录 ******\n");
printf("****0.退出系统 ******\n");
printf("请输入您的选择:\n");
scanf("%d",&i);
switch(i)
{
case 1:CreateList(L);break;
case 2:ListDelete(L,5);break;//删除第10记录
case 0:exit(0);
default:printf("输入不正确,请重新输入!\n");
}
}
}
请问高手,显示 红色 的部分怎么解决!帮帮忙啊!
#include<stdlib.h>
typedef struct std //学生的数据结构类型
{ int no;
char stunum[10];
char stuname[10];
char sex[5];
}stu;
typedef struct Node// 单链表的结点类型
{
stu data;
struct Node *next;
}LNode, *LinkList;
LinkList L; //定义头指针
stu s1;
char str[81];
void CreateList(LinkList L)
{
LinkList p,q;
FILE *fp;
//int i;
if((fp=fopen("abc.txt","r"))==NULL)
{
printf("打开文件失败,请检查路径设置!\n\n");
exit(1);
}
fgets(str,81,fp);
printf("\t%s\n",str);
L=(LinkList)malloc(sizeof(LNode));
if(L==NULL)
{
printf("失败 !");
exit(0);
}
L->next=NULL;
q = L;
while(!feof(fp))
{
p=(LinkList)malloc(sizeof(LNode));
if(p==NULL)
{
printf("失败 !");
exit(0);
}
p->next=NULL;
fscanf(fp,"%d%s%s%s%s%d%d%d",&p->data.no,p->data.stunum,p->data.stuname,p->data.sex);
q->next = p;
q = p;
}
fclose(fp);
printf("\n");
p=L->next;
while(p!=NULL)
{
printf("\t%d\t%s\t%s\t%s\t%s\t%d\t%d\t%d\n",p->data.no,p->data.stunum,p->data.stuname,p->data.sex);
p=p->next;
}
printf("创建成功!\n");
}
//删除记录
void ListDelete(LinkList L,int i)
{
int num;
int j=1;
LinkList p,q;
q=(LinkList)malloc(sizeof(LNode));//申请结点空间
p=L->next;
printf("请输入要删除的学生的编号:\n");
scanf("%d",&num);
while(p!=NULL);
{
if(p->data.no==num &&p->next!=NULL) /*怎么解决p->next为空时候的情况?即删除最后一条记录的时候*/
{
p=p->next;//找结点并删除
}
printf("\t%d\t%s\t%s\t%s\t%s\t%d\t%d\t%d\n",p->data.no,p->data.stunum,p->data.stuname,p->data.sex);
p=p->next;
}
}
//主函数
void main()
{
int i;
while(1)
{
printf("******学生成绩管理系统******\n");
printf("****1.创建链表 ******\n");
printf("****2.删除记录 ******\n");
printf("****0.退出系统 ******\n");
printf("请输入您的选择:\n");
scanf("%d",&i);
switch(i)
{
case 1:CreateList(L);break;
case 2:ListDelete(L,5);break;//删除第10记录
case 0:exit(0);
default:printf("输入不正确,请重新输入!\n");
}
}
}