严蔚敏版数据结构建立学生信息单链表C语言版适合VC++

  • 格式:doc
  • 大小:39.50 KB
  • 文档页数:8
#include <stdio.h>
#include <malloc.h>
#include<stdlib.h>
typedef struct Student/*定义学生类*/
{
int num;
char name[20];
char sex[2];
int age;
float grade;
}stu;
typedef struct LNode
{
if(!L)
printf("ERROR\n");
else
{
if(!L->next)
printf("TRUE\n");
else
printf("FLASE\n");
}
}
int ListLength_L(Linklist L)/*返回L中数ห้องสมุดไป่ตู้元素个数*/
{
int i=0;
Linklist p=L;
if(!L)
printf("请输入需删除元素的位序:\n");
scanf("%d",&i);
ListDelete_L(L,i);
printf("现在输出删除后的单链表\n");
display(L);
break;
}
case 0:exit(0);
}
}
void ClearList_L(Linklist L)/*将L重置为空表*/
{
Linklist p;
if(!L)
printf("ERROR\n");
else
{
while(L->next)
{
p=L->next;
L->next=p->next;
free(p);
}
printf("OK\n");
}
}
void ListEmpty_L(Linklist L)/*L为空表返回TRUE,否则返回FALSE*/
{
stu data;
struct LNode *next;
}LNode,* Linklist;
Linklist InitList_L(Linklist L)/*构造一个空的单向链表*/
{
L=(Linklist)malloc(sizeof(stu));
if(!L)
printf("ERROR\n");
else
case 5:ListEmpty_L(L);break;
case 6:printf("线性表的长度为%d.\n",ListLength_L(Q));break;
case 7:{
int i;
printf("请输入查找的数据位序:\n");
scanf("%d",&i);
GetElem_L(L,i);
break;
printf("请输入学生的数据,学号为零停止:\n学号:\n");
scanf("%d",&p1->data.num);
printf("姓名:\n");
scanf("%s",&p1->);
printf("年龄\n");
scanf("%d",&p1->data.age);
printf("性别:\n");
}
case 8:{
stu cur_e;
printf("请输入cue_e的学生的学号:\n");
scanf("%d",&cur_e.num);
PriorElem_L(L,cur_e);
break;
}
case 9:{
stu cur_e;
printf("请输入cue_e的学生的学号:\n");
scanf("%d",&cur_e.num);
printf(" 11.删除第i个元素\n");
printf(" 0.结束\n");
printf("***********************************************\n");
printf("请输入你的选择(0~11):\n");
scanf("%d",&n);
switch(n)
}
}
void ListDelete_L(Linklist L,int i)/*删除第i个元素*/
{
Linklist p=L,q;
int j=0;
while(p&&j<i-2)
{
p=p->next;
++j;
}
if(!p->next||j>i-2)
printf("ERROR\n");
else
{
q=p->next;
scanf("%d",&s->data.age);
printf("性别:\n");
scanf("%s",&s->data.sex);
printf("成绩:\n");
scanf("%f",&s->data.grade);
s->next=p->next;
p->next=s;
printf("OK\n");
}
if(!p||j>i)
printf("ERROR\n");
else
{
printf("学生%d的数据为:\n",i);
printf("学号:%d\n姓名:%s\n性别:%s\n年龄:%d\n成绩:%f\n",p->data.num,p->,p->data.sex,p->data.age,p->data.grade);
printf("OK\n");
}
}
void ListInsert_L(Linklist L,int i)/*在i位置之前插入新元素*/
{
int j=0;
Linklist p=L,s;
while(p&&j<i-2)
{
p=p->next;
++j;
}
if(!p||j>i-2)
printf("ERROR\n");
{
case 1:L=InitList_L(L);break;
case 2:{
printf("现在请重新建立单链表\n");
L=ListCreat_L();
printf("现在输出建立的单链表\n");
display(L);
break;
}
case 3:DestroyList_L(L);break;
case 4:ClearList_L(L);break;
printf("ERROR\n");
else
{
printf("cur_e的前驱为:\n");
printf("num:%d\nname:%s\nsex:%s\nage:%d\ngrade:%f\n",p->data.num,p->,p->data.sex,p->data.age,p->data.grade);
getchar();
for(;;)
{
printf("***********************菜单******************\n");
printf(" 1.建立空的单链表\n");
printf(" 2.建立单链表\n");
printf(" 3.销毁单链表\n");
printf(" 4.将单链表置为空表\n");
printf("OK\n");
}
}
void PriorElem_L(Linklist L,stu cur_e)/*用pre_e返回cur_e的前驱*/
{
Linklist p=L;
while(p->next&&(p->next->data).num!=cur_e.num)
p=p->next;
if(!p->next)
{
printf("ERROR\n");
break;
break;
}
}
if(!p)
printf("OK\n");
}
Linklist ListCreat_L()/*建立不带头结点的单链表*/
{
Linklist L,p1,p2;
int n=0;
p1=p2=(Linklist)malloc(sizeof(LNode));
return 0;
else
{
while(p)
{
i++;
p=p->next;
}
return i;
}
}
void GetElem_L(Linklist L,int i)//返回第i个元素的值*/