|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
struct Student
{
int num;
char name[10];
char sex;
char subject[10];
float score;
struct Student * pNext;
};
void insert_list(struct Student *,int);
bool del_node(struct Student * ,int);
struct Student * initialize(struct Student *);
//bool teavrse_list();
//bool find_node();
int nodes(struct Student *);
int main(void)
{
struct Student * pHead;
int Num;
int val,n;
printf("%d",sizeof(struct Student ));
do
{
printf("\n 请选择功能键:\n\n");
printf(" ☆☆☆☆☆☆☆☆☆☆☆☆☆");
printf("\n\n ---1.新建学生信息\n");
printf(" ---2.建立数据链表\n");
printf(" ---3.删除一个学生的信息\n");
printf(" ---4.查找一个学生的信息\n");
printf(" ---5.输出所有学生的信息\n");
printf(" ---6.查找一个学生的信息\n");
printf(" ---7.推出\n\n");
printf(" ☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
scanf("%d",&val);
switch(val)
{
case 1 :
printf("Please enter you want insert number:\n");
scanf("%d",&n);
insert_list(pHead,n);
break;
case 2:
pHead=initialize(pHead);
break;
case 3 :
printf("请输入要删除的学生的学号:\n number=");
scanf("%d",&Num);
if(del_node(pHead,Num))
printf("删除学生信息成功!\n");
else
printf("删除失败\n");
break;
/*case 3 : find_node();
break;
case 4 : teavrse_list();
break;*/
case 6 : break;
default : printf("Enter error!Please enter it again!");
break;
}
}while(val != 6);
return 0;
}
struct Student *initialize(struct Student * phead)
{
int a,count;
struct Student *p,*q=phead;
printf("Please enter the students' a number of:\n");
scanf("%d",&count);
for(a=0;a<count;a++)
{
p=(struct Student *)malloc(sizeof(struct Student));
if(NULL==p)
{
printf("动态分配内存失败");
exit(-1);
}
printf("Please enter the students' information:\n");
printf("students' number:");
scanf("%d",&p->num);
printf("students' name:");
scanf("%s",p->name);
printf("students' sex:");
scanf("%c",&p->sex);
printf("students' subject:");
scanf("%s",p->subject);
printf("students' score:");
scanf("%f",&p->score);
q->pNext=p;
q=p;
}
p->pNext=NULL;
return phead;
}
void insert_list(struct Student *phead ,int locat)
{
int j=0;
struct Student *p,*q;
q = phead;
while(j<locat&&(q->pNext!=NULL))
{
j++;
q=q->pNext;
}
if(j>locat&&!q) exit(0);
p =(struct Student *)malloc(sizeof(struct Student));
if(NULL == p)
{
printf("动态分配内存失败");
exit(-1);
}
printf("Please enter the students' node information:\n");
printf("students' number:");
scanf("%d",&p->num);
printf("students' name:");
scanf("%s",p->name);
printf("students' sex:");
scanf("%c",&p->sex);
printf("students' subject:");
scanf("%s",p->subject);
printf("students' score:");
scanf("%f",&p->score);
p->pNext=q->pNext;
q->pNext = p;
}
bool del_node(struct Student * phead,int num)
{
int i;
struct Student * p,*temp;
p = phead;
while(NULL != p && i < num-1)//执行完后p执行了num-1个节点
{
p = p->pNext;
++i;
}
if(i > num-1 || NULL == p)
return false;
else
{
temp = p->pNext;
p->pNext = temp->pNext;
free(temp);
temp = NULL;
return true;
}
}
/*int nodes(pStu phead)
{
int i=0;
pStu p = phead;
if(NULL == phead->pNext)
return 0;
else
{
while(NULL != p)
{
p = p->pNext;
++i;
}
return i;
}
} */
|
|