严蔚敏版数据结构建立学生信息无头结点单链表C语言版
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
return 0;
else
{
while(p)
{
i++;
p=p->next;
}
return i;
}
}
void GetElem_L(Linklist L,int i)//返回第i个元素的值*/
{
stu e;
Linklist p=L;
int j=1;
while(p!=NULL&&j<i)
{
p=p->next;
scanf("%s",&p1->data.sex);
printf("成绩:\n");
scanf("%f",&p1->data.grade);
}
p2->next=NULL;
return L;
}
void display(Linklist p)
{
printf("***************学生信息*****************\n");
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");
else
{
s=(Linklist)malloc(sizeof(LNode));
printf("请输入要插入的元素的数据:\n");
printf("学号:\n");
scanf("%d",&s->data.num);
printf("姓名:\n");
scanf("%s",&s->data.name);
printf("年龄\n");
printf("学号姓名性别年龄成绩\n");
while(p)
{
printf("%d\t%s\t%s\t%d\t%f\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.grade);
p=p->next;
}
printf("****************************************\n");
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("ERROR\n");
else
{
printf("cur_e的前驱为:\n");
printf("num:%d\nname:%s\nsex:%s\nage:%d\ngrade:%f\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.grade);
NextElem_L(L,cur_e);
break;
}
case 10:{
int i;
printf("请输入插入的位序:\n");
scanf("%d",&i);
ListInsert_L(L,i);
printf("现在输出插入后的单链表\n");
display(L);
break;
}
case 11:{
int i;
}
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);
getchar();
for(;;)
{
printf("**************Βιβλιοθήκη Baidu********菜单******************\n");
printf(" 1.建立空的单链表\n");
printf(" 2.建立单链表\n");
printf(" 3.销毁单链表\n");
printf(" 4.将单链表置为空表\n");
printf("请输入需删除元素的位序:\n");
scanf("%d",&i);
ListDelete_L(L,i);
printf("现在输出删除后的单链表\n");
display(L);
break;
}
case 0:exit(0);
{
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));
}
}
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*/
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)
struct LNode *next;
}LNode,* Linklist;
Linklist InitList_L(Linklist L)/*构造一个空的单向链表*/
{
L=(Linklist)malloc(sizeof(stu));
if(!L)
printf("ERROR\n");
else
{
L=NULL;
printf(" 11.删除第i个元素\n");
printf(" 0.结束\n");
printf("***********************************************\n");
printf("请输入你的选择(0~11):\n");
scanf("%d",&n);
switch(n)
printf("OK\n");
return L;
}
}
void DestroyList_L(Linklist L)//销毁单向链表*/
{
Linklist p;
if(!L)
printf("ERROR\n");
else
{
while(L)
{
p=L;
L=L->next;
free(p);
}
printf("OK\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;
printf("OK\n");
}
}
void NextElem_L(Linklist L,stu cur_e)/*用next_e返回cur_e的后驱*/
{
Linklist p=L;
while(p&&(p->data).num!=cur_e.num)
p=p->next;
if(!p||!p->next)
printf("ERROR\n");
p->next=q->next;
free(q);
printf("OK\n");
}
}
void ListTraverse_L(Linklist L,int visit(stu))/*对L中每个元素调用函数visit()*/
{
Linklist p=L->next;
while(p)
{
if(!visit(p->data))
printf("请输入学生的数据,学号为零停止\n学号:\n");
scanf("%d",&p1->data.num);
printf("姓名:\n");
scanf("%s",&p1->data.name);
printf("年龄\n");
scanf("%d",&p1->data.age);
printf("性别:\n");
printf(" 5.L若为空表返回TRUE,否则返回FLASE\n");
printf(" 6.返回L中数据元素个数\n");
printf(" 7.返回L中第i个元素的值\n");
printf(" 8.返回cur_e的前驱\n");
printf(" 9.返回cur_e的后驱\n");
printf(" 10.在i之前插入新元素\n");
++j;
}
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->data.name,p->data.sex,p->data.age,p->data.grade);
{
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)
{
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;
scanf("%s",&p1->data.sex);
printf("成绩:\n");
scanf("%f",&p1->data.grade);
L=NULL;
while(p1->data.num!=0)
{
n=n+1;
if(n==1)
L=p1;
else
p2->next=p1;
p2=p1;
p1=(Linklist)malloc(sizeof(LNode));
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");
#include <stdio.h>
#include <malloc.h>
typedef struct Student/*定义学生类*/
{
int num;
char name[20];
char sex[2];
int age;
float grade;
}stu;
typedef struct LNode
{
stu data;
else
{
printf("cur_e的后驱为:\n");
printf("num:%d\nname:%s\nsex:%s\nage:%d\ngrade:%f\n",p->next->data.num,p->next->data.name,p->next->data.sex,p->next->data.age,p->next->data.grade);
printf("请输入学生的数据,学号为零停止:\n学号:\n");
scanf("%d",&p1->data.num);
printf("姓名:\n");
scanf("%s",&p1->data.name);
printf("年龄\n");
scanf("%d",&p1->data.age);
printf("性别:\n");
}
void main()
{
Linklist L,Q,p;
printf("首先请先建立一个学生数据单链表再进行其他操作\n");
Q=ListCreat_L();
p=Q;
L=Q;
printf("现在输出建立的表\n");
display(p);
int n;
printf(" \n请输入任意键进入菜单........\n");
else
{
while(p)
{
i++;
p=p->next;
}
return i;
}
}
void GetElem_L(Linklist L,int i)//返回第i个元素的值*/
{
stu e;
Linklist p=L;
int j=1;
while(p!=NULL&&j<i)
{
p=p->next;
scanf("%s",&p1->data.sex);
printf("成绩:\n");
scanf("%f",&p1->data.grade);
}
p2->next=NULL;
return L;
}
void display(Linklist p)
{
printf("***************学生信息*****************\n");
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");
else
{
s=(Linklist)malloc(sizeof(LNode));
printf("请输入要插入的元素的数据:\n");
printf("学号:\n");
scanf("%d",&s->data.num);
printf("姓名:\n");
scanf("%s",&s->data.name);
printf("年龄\n");
printf("学号姓名性别年龄成绩\n");
while(p)
{
printf("%d\t%s\t%s\t%d\t%f\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.grade);
p=p->next;
}
printf("****************************************\n");
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("ERROR\n");
else
{
printf("cur_e的前驱为:\n");
printf("num:%d\nname:%s\nsex:%s\nage:%d\ngrade:%f\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.grade);
NextElem_L(L,cur_e);
break;
}
case 10:{
int i;
printf("请输入插入的位序:\n");
scanf("%d",&i);
ListInsert_L(L,i);
printf("现在输出插入后的单链表\n");
display(L);
break;
}
case 11:{
int i;
}
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);
getchar();
for(;;)
{
printf("**************Βιβλιοθήκη Baidu********菜单******************\n");
printf(" 1.建立空的单链表\n");
printf(" 2.建立单链表\n");
printf(" 3.销毁单链表\n");
printf(" 4.将单链表置为空表\n");
printf("请输入需删除元素的位序:\n");
scanf("%d",&i);
ListDelete_L(L,i);
printf("现在输出删除后的单链表\n");
display(L);
break;
}
case 0:exit(0);
{
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));
}
}
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*/
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)
struct LNode *next;
}LNode,* Linklist;
Linklist InitList_L(Linklist L)/*构造一个空的单向链表*/
{
L=(Linklist)malloc(sizeof(stu));
if(!L)
printf("ERROR\n");
else
{
L=NULL;
printf(" 11.删除第i个元素\n");
printf(" 0.结束\n");
printf("***********************************************\n");
printf("请输入你的选择(0~11):\n");
scanf("%d",&n);
switch(n)
printf("OK\n");
return L;
}
}
void DestroyList_L(Linklist L)//销毁单向链表*/
{
Linklist p;
if(!L)
printf("ERROR\n");
else
{
while(L)
{
p=L;
L=L->next;
free(p);
}
printf("OK\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;
printf("OK\n");
}
}
void NextElem_L(Linklist L,stu cur_e)/*用next_e返回cur_e的后驱*/
{
Linklist p=L;
while(p&&(p->data).num!=cur_e.num)
p=p->next;
if(!p||!p->next)
printf("ERROR\n");
p->next=q->next;
free(q);
printf("OK\n");
}
}
void ListTraverse_L(Linklist L,int visit(stu))/*对L中每个元素调用函数visit()*/
{
Linklist p=L->next;
while(p)
{
if(!visit(p->data))
printf("请输入学生的数据,学号为零停止\n学号:\n");
scanf("%d",&p1->data.num);
printf("姓名:\n");
scanf("%s",&p1->data.name);
printf("年龄\n");
scanf("%d",&p1->data.age);
printf("性别:\n");
printf(" 5.L若为空表返回TRUE,否则返回FLASE\n");
printf(" 6.返回L中数据元素个数\n");
printf(" 7.返回L中第i个元素的值\n");
printf(" 8.返回cur_e的前驱\n");
printf(" 9.返回cur_e的后驱\n");
printf(" 10.在i之前插入新元素\n");
++j;
}
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->data.name,p->data.sex,p->data.age,p->data.grade);
{
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)
{
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;
scanf("%s",&p1->data.sex);
printf("成绩:\n");
scanf("%f",&p1->data.grade);
L=NULL;
while(p1->data.num!=0)
{
n=n+1;
if(n==1)
L=p1;
else
p2->next=p1;
p2=p1;
p1=(Linklist)malloc(sizeof(LNode));
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");
#include <stdio.h>
#include <malloc.h>
typedef struct Student/*定义学生类*/
{
int num;
char name[20];
char sex[2];
int age;
float grade;
}stu;
typedef struct LNode
{
stu data;
else
{
printf("cur_e的后驱为:\n");
printf("num:%d\nname:%s\nsex:%s\nage:%d\ngrade:%f\n",p->next->data.num,p->next->data.name,p->next->data.sex,p->next->data.age,p->next->data.grade);
printf("请输入学生的数据,学号为零停止:\n学号:\n");
scanf("%d",&p1->data.num);
printf("姓名:\n");
scanf("%s",&p1->data.name);
printf("年龄\n");
scanf("%d",&p1->data.age);
printf("性别:\n");
}
void main()
{
Linklist L,Q,p;
printf("首先请先建立一个学生数据单链表再进行其他操作\n");
Q=ListCreat_L();
p=Q;
L=Q;
printf("现在输出建立的表\n");
display(p);
int n;
printf(" \n请输入任意键进入菜单........\n");