数据结构实验源代码Word文件下载.doc
- 文档编号:6981483
- 上传时间:2023-05-07
- 格式:DOC
- 页数:62
- 大小:460KB
数据结构实验源代码Word文件下载.doc
《数据结构实验源代码Word文件下载.doc》由会员分享,可在线阅读,更多相关《数据结构实验源代码Word文件下载.doc(62页珍藏版)》请在冰点文库上搜索。
计17
健康
提示:
循环表
62
#include<
string.h>
#include<
ctype.h>
malloc.h>
//malloc()等
limits.h>
//INT_MAX等
stdio.h>
//EOF(=^Z或F6),NULL
stdlib.h>
//atoi()
io.h>
//eof()
math.h>
//floor(),ceil(),abs()
process.h>
//exit()
//函数结果状态代码
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
//#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此行
typedefintStatus;
//Status是函数的类型,其值是函数结果状态代码,如OK等
typedefintBoolean;
//Boolean是布尔类型,其值是TRUE或FALSE
structstud
{
charname[12];
charnum[12];
charsex[4];
intage;
charclas[10];
charhealth[16];
};
typedefstudElemType;
typedefstructLNode
ElemTypedate;
structLNode*next;
}LNode,*LinkList;
voidCreateList2(LinkList&
L,intn)
{//正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表
inti;
LinkListp,q;
L=(LinkList)malloc(sizeof(LNode));
//生成头结点
q=L;
scanf("
%s%s%s%d%s%s"
L->
date.name,L->
date.num,L->
date.sex,&
L->
date.age,L->
date.clas,L->
date.health);
for(i=1;
i<
n;
i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("
p->
date.name,p->
date.num,p->
p->
date.age,p->
date.clas,p->
q->
next=p;
q=q->
next;
}
p->
next=L;
}
voidrun(LinkListL,intm)
{
inti;
LinkListp,q;
p=L;
while(p)
{
for(i=1;
m;
{
q=p;
p=p->
}
printf("
%s%s%s%d%s%s\n"
date.sex,p->
q->
next=p->
free(p);
p=q->
if(p==p->
next)
{
break;
}
}
printf("
%s%s%s%d%s%s"
\n"
);
free(p);
//要将P释放掉,应为在前面L已经被释放掉
intmain()
intn,m;
LinkListLa;
学生信息管理
用链式存储结构实现对一个班级学生信息管理。
设计程序求出每个人的平均成绩并按平均成绩由高到底排序后输出学生记录。
人数n
学号姓名成绩1
成绩2
成绩3)
人员记录x
1
人员记录y
2
…
人员记录z
n
3
1孙俪莉
76
78
89
2章子怡
72
56
67
3刘德华
84
90
76
78
89
81.00
3刘德华56
84
90
76.67
2章子怡72
67
65.00
#defineMaxSize1000
typedefstructStudent
longnum;
charname[10];
floatscore_1;
floatscore_2;
floatscore_3;
floatave_score;
longrank;
}StudentType;
typedefStudentTypeDataType;
typedefstructNode
DataTypedata;
structNode*next;
}SLNode;
voidListInitiate(SLNode**L)
if((*L=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit
(1);
(*L)->
next=NULL;
}
intListInsert(SLNode*L,inti,DataTypex)
SLNode*p,*q;
intj;
p=L;
j=0;
while(p->
next!
=NULL&
&
j<
i-1)
p=p->
j++;
if(j!
=i-1)
printf("
error"
return0;
if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit
(1);
q->
data=x;
p->
next=q;
return0;
voidRanking(SLNode*L)
SLNode*p,*q,*s;
longi=0;
=NULL)
p->
data.ave_score=(p->
data.score_1+p->
data.score_2+p->
data.score_3)/3;
i++;
while(i--)
p=L;
s=p;
q=p->
while(p->
{
if(p->
data.ave_score<
q->
data.ave_score)
{
if(q->
p->
next=q->
else
q->
s->
q=p->
s=s->
}
else//后移
s=p;
p=p->
}
i=1;
data.rank=i++;
voidDestroy(SLNode**L)
SLNode*p,*p1;
p=*L;
while(p!
p1=p;
free(p1);
*L=NULL;
intmain(void)
SLNode*L,*p;
StudentTypex[MaxSize];
intn;
inti;
ListInitiate(&
L);
scanf("
%d"
&
n);
//班级人数
for(i=1;
i<
=n;
i++)
scanf("
%ld"
x[i].num);
%s"
x[i].name);
%f"
&
x[i].score_1);
x[i].score_2);
x[i].score_3);
ListInsert(L,i,x[i]);
Ranking(L);
%ld"
p->
data.num);
%s"
p->
data.name);
%.2f"
data.score_1);
data.score_2);
data.score_3);
data.ave_score);
%ld\n"
data.rank);
Destroy(&
链表上的基本操作实现
在单链表存储结构上实现基本操作:
初始化、创建、插入、删除、查找、遍历、逆置、合并运算。
线性表长度n
a1a2a3...an(数值有序,为降序)
要插入到线性表中的数字x和插入的位置i
要删除的数字的位置i
要查找的数字x
线性表长度m
b1b2...bm(数值有序,为升序)
创建的线性表a1a2...an
插入一个数字后的线性表a1a2...an+1
删除一个数字后的线性表a1a2...an
查找一个输入的数字后如果找到,输出该数字的位置i,如果没有找到,输出“没有找到x”的信息。
逆置a1a2...an后的线性表anan-1...a1
合并两个线性表后的线性表
请输入线性表La的长度:
6
请输入线性表La中的元素:
151310
9
85
请输入要插入到线性表La中的数字x和要插入的位置:
76
线性表La=151310
875(输出)
请输入要删除的数字的位置:
4
请输入要查找的数字:
10
找到,10在第3个位置
逆置线性表La=578101315
请输入线性表Lb的长度:
请输入线性表Lb中的元素:
1369
合并La和Lb后的线性表为:
1356789101315
#defineOK1
#defineERROR0
#defineOVERFLOW-2
typedefintElemType;
typedefintStatus;
#defineLIST_INIT_SIZE4//线性表存储空间的初始分配量
#defineLISTINCREMENT2//线性表存储空间的分配增量
structSqList
ElemType*elem;
//存储空间基址
intlength;
//当前长度
intlistsize;
//当前分配的存储容量(以sizeof(ElemType)为单位)
}Sqlist;
StatusInitList_Sq(SqList&
L)
//操作结果:
构造一个空的顺序线性表
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
L.elem)
exit(OVERFLOW);
//存储分配失败
L.length=0;
//空表长度为0
L.listsize=LIST_INIT_SIZE;
//初始存储容量
returnOK;
StatusListInsert_Sq(SqList&
L,inti,ElemTypee)
//初始条件:
顺序线性表L已存在,1≤i≤ListLength(L)+1
在L中第i个位置之前插入新的数据元素e,L的长度加1
ElemType*newbase,*q,*p;
if(i<
1||i>
L.length+1)//i值不合法
returnERROR;
if(L.length>
=L.listsize)//当前存储空间已满,增加分配
if(!
(newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))))
exit(OVERFLOW);
L.elem=newbase;
//新基址
L.listsize+=LISTINCREMENT;
//增加存储容量
q=L.elem+i-1;
//q为插入位置
for(p=L.elem+L.length-1;
p>
=q;
--p)//插入位置及之后的元素右移
*(p+1)=*p;
*q=e;
//插入eListInsert(Lb,)
++L.length;
//表长增1
StatusListprint_Sq(SqList&
for(i=0;
=L.length-1;
%d"
L.elem[i]);
StatusListDelete_Sq(SqList&
L,inti,ElemType&
e)
ElemType*p,*q;
if((i<
1)||(i>
L.length))
returnERROR;
p=L.elem+i-1;
e=*p;
q=L.elem+L.length-1;
for(p=L.elem+i;
p<
++p)
*(p-1)=*p;
--L.length;
intLocateElem_Sq(SqListL,ElemTypee)
inti=1;
for(p=L.elem;
p++)
if(*p==e)
returni;
break;
i++;
StatusListNiZhi_Sq(SqList&
ElemTypee;
q=&
L.elem[L.length-1];
for(p=L.elem;
q;
e=*p;
*p=*q;
*q=e;
q--;
voidMergeList_Sq(SqListLa,SqListLb,SqList&
Lc)
ElemType*pa,*pb,*pc,*pa_last,*pb_last;
pa=La.elem;
pb=Lb.elem;
Lc.listsize=Lc.length=La.length+Lb.length;
pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType));
Lc.elem)
exit(OVERFLOW);
pa_last=La.elem+La.length-1;
pb_last=Lb.elem+Lb.length-1;
while(pa<
=pa_last&
pb<
=pb_last)
if(*pa<
=*pb)
*pc++=*pa++;
else
*pc++=*pb++;
=pa_last)
*pc++=*pa++;
while(pb<
*pc++=*pb++;
SqListLa;
//建立线性表La
InitList_Sq(La);
intj,n,c,i,x;
for(j=0;
j<
n;
j++)
c);
ListInsert_Sq(La,j+1,c);
创建好的线性表La="
Listprint_Sq(La);
%d%d"
x,&
i);
ListInsert_Sq(La,i,x);
插入一个元素后的线性表La="
intm;
m);
ListDelete_Sq(La,m,e);
删除一个元素后的线性表La="
ElemTypea;
intt;
a);
t=LocateElem_Sq(La,a);
if(t)
找到,%d在第%d个位置\n"
a,t);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 源代码