建立学生信息无头结点单链表C语言版.docx

上传人:b****9 文档编号:23408389 上传时间:2023-05-16 格式:DOCX 页数:14 大小:16.42KB
下载 相关 举报
建立学生信息无头结点单链表C语言版.docx_第1页
第1页 / 共14页
建立学生信息无头结点单链表C语言版.docx_第2页
第2页 / 共14页
建立学生信息无头结点单链表C语言版.docx_第3页
第3页 / 共14页
建立学生信息无头结点单链表C语言版.docx_第4页
第4页 / 共14页
建立学生信息无头结点单链表C语言版.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

建立学生信息无头结点单链表C语言版.docx

《建立学生信息无头结点单链表C语言版.docx》由会员分享,可在线阅读,更多相关《建立学生信息无头结点单链表C语言版.docx(14页珍藏版)》请在冰豆网上搜索。

建立学生信息无头结点单链表C语言版.docx

建立学生信息无头结点单链表C语言版

#include

#include

typedefstructStudent/*定义学生类*/

{

intnum;

charname[20];

charsex[2];

intage;

floatgrade;

}stu;

typedefstructLNode

{

studata;

structLNode*next;

}LNode,*Linklist;

LinklistInitList_L(LinklistL)/*构造一个空的单向链表*/

{

L=(Linklist)malloc(sizeof(stu));

if(!

L)

printf("ERROR\n");

else

{

L=NULL;

printf("OK\n");

returnL;

}

}

voidDestroyList_L(LinklistL)//销毁单向链表*/

{

Linklistp;

if(!

L)

printf("ERROR\n");

else

{

while(L)

{

p=L;

L=L->next;

free(p);

}

printf("OK\n");

}

}

voidClearList_L(LinklistL)/*将L重置为空表*/

{

Linklistp;

if(!

L)

printf("ERROR\n");

else

{

while(L->next)

{

p=L->next;

L->next=p->next;

free(p);

}

printf("OK\n");

}

}

voidListEmpty_L(LinklistL)/*L为空表返回TRUE,否则返回FALSE*/

{

if(!

L)

printf("ERROR\n");

else

{

if(!

L->next)

printf("TRUE\n");

else

printf("FLASE\n");

}

}

intListLength_L(LinklistL)/*返回L中数据元素个数*/

{

inti=0;

Linklistp=L;

if(!

L)

return0;

else

{

while(p)

{

i++;

p=p->next;

}

returni;

}

}

voidGetElem_L(LinklistL,inti)//返回第i个元素的值*/

{

stue;

Linklistp=L;

intj=1;

while(p!

=NULL&&j

{

p=p->next;

++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);

printf("OK\n");

}

}

voidPriorElem_L(LinklistL,stucur_e)/*用pre_e返回cur_e的前驱*/

{

Linklistp=L;

while(p->next&&(p->next->data).num!

=cur_e.num)

p=p->next;

if(!

p->next)

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);

printf("OK\n");

}

}

voidNextElem_L(LinklistL,stucur_e)/*用next_e返回cur_e的后驱*/

{

Linklistp=L;

while(p&&(p->data).num!

=cur_e.num)

p=p->next;

if(!

p||!

p->next)

printf("ERROR\n");

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("OK\n");

}

}

voidListInsert_L(LinklistL,inti)/*在i位置之前插入新元素*/

{

intj=0;

Linklistp=L,s;

while(p&&j

{

p=p->next;

++j;

}

if(!

p||j>i-2)

printf("ERROR\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");

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");

}

}

voidListDelete_L(LinklistL,inti)/*删除第i个元素*/

{

Linklistp=L,q;

intj=0;

while(p&&j

{

p=p->next;

++j;

}

if(!

p->next||j>i-2)

printf("ERROR\n");

else

{

q=p->next;

p->next=q->next;

free(q);

printf("OK\n");

}

}

voidListTraverse_L(LinklistL,intvisit(stu))/*对L中每个元素调用函数visit()*/

{

Linklistp=L->next;

while(p)

{

if(!

visit(p->data))

{

printf("ERROR\n");

break;

break;

}

}

if(!

p)

printf("OK\n");

}

LinklistListCreat_L()/*建立不带头结点的单链表*/

{

LinklistL,p1,p2;

intn=0;

p1=p2=(Linklist)malloc(sizeof(LNode));

printf("请输入学生的数据,学号为零停止\n学号:

\n");

scanf("%d",&p1->data.num);

printf("姓名:

\n");

scanf("%s",&p1->data.name);

printf("年龄\n");

scanf("%d",&p1->data.age);

printf("性别:

\n");

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("请输入学生的数据,学号为零停止:

\n学号:

\n");

scanf("%d",&p1->data.num);

printf("姓名:

\n");

scanf("%s",&p1->data.name);

printf("年龄\n");

scanf("%d",&p1->data.age);

printf("性别:

\n");

scanf("%s",&p1->data.sex);

printf("成绩:

\n");

scanf("%f",&p1->data.grade);

}

p2->next=NULL;

returnL;

}

voiddisplay(Linklistp)

{

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");

}

voidmain()

{

LinklistL,Q,p;

printf("首先请先建立一个学生数据单链表再进行其他操作\n");

Q=ListCreat_L();

p=Q;

L=Q;

printf("现在输出建立的表\n");

display(p);

intn;

printf("\n请输入任意键进入菜单........\n");

getchar();

for(;;)

{

printf("***********************菜单******************\n");

printf("1.建立空的单链表\n");

printf("2.建立单链表\n");

printf("3.销毁单链表\n");

printf("4.将单链表置为空表\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");

printf("11.删除第i个元素\n");

printf("0.结束\n");

printf("***********************************************\n");

printf("请输入你的选择(0~11):

\n");

scanf("%d",&n);

switch(n)

{

case1:

L=InitList_L(L);break;

case2:

{

printf("现在请重新建立单链表\n");

L=ListCreat_L();

printf("现在输出建立的单链表\n");

display(L);

break;

}

case3:

DestroyList_L(L);break;

case4:

ClearList_L(L);break;

case5:

ListEmpty_L(L);break;

case6:

printf("线性表的长度为%d.\n",ListLength_L(Q));break;

case7:

{

inti;

printf("请输入查找的数据位序:

\n");

scanf("%d",&i);

GetElem_L(L,i);

break;

}

case8:

{

stucur_e;

printf("请输入cue_e的学生的学号:

\n");

scanf("%d",&cur_e.num);

PriorElem_L(L,cur_e);

break;

}

case9:

{

stucur_e;

printf("请输入cue_e的学生的学号:

\n");

scanf("%d",&cur_e.num);

NextElem_L(L,cur_e);

break;

}

case10:

{

inti;

printf("请输入插入的位序:

\n");

scanf("%d",&i);

ListInsert_L(L,i);

printf("现在输出插入后的单链表\n");

display(L);

break;

}

case11:

{

inti;

printf("请输入需删除元素的位序:

\n");

scanf("%d",&i);

ListDelete_L(L,i);

printf("现在输出删除后的单链表\n");

display(L);

break;

}

case0:

exit(0);

default:

printf("输入数据有误,请重新输入\n");

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1