数据结构实验报告.docx
- 文档编号:2463551
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:17
- 大小:236.73KB
数据结构实验报告.docx
《数据结构实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构实验报告
沈阳工程学院
学生实验报告
实验室名称:
信息工程系F608实验室
实验课程名称:
数据结构与算法
实验项目名称:
线性表的基本操作
班级:
计专本121姓名:
郑永凯学号:
2012461127
实验日期:
2013年03月22日实验台编号:
17
指导教师:
代钦
批阅教师(签字):
成绩:
一.实验目的
1、掌握使用VC6.0上机调试线性表的基本方法;
2、掌握线性表的基本操作:
插入,删除,查找等运算在顺序存储结构和链式存储结构上的运算。
二.实验内容
1、建立一个有10个结点的单链表并掌握如何定义结点的结构。
2、完成在建立好的单链表中删除指定i位置的结点并输出删除结点后的单链表。
3、在建立好的单链表中在指定i位置插入一个新的结点并输出插入结点后的单链表。
三.实验前的准备
●了解线性表的顺序和链式存储结构。
●理解并定义线性表的存储结构,线性表的运算。
三.实验要求及实验软硬件环境
【基本要求】
●理解并定义线性表的存储结构。
●掌握线性表的基本操作:
插入,删除,查找等运算在顺序存储结构和链式存储结构上的运算。
【实验组织方式】
●个人实验
【实验条件】
●Windows操作系统
四.实验过程及程序清单
1、线性表的基本操作的程序代码:
#include"stdio.h"
#include"malloc.h"
#include"process.h"
#include"string.h"
#defineOK1
#defineERROR0
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
#defineTRUE1
#defineFALSE0
#defineINFEASIBLE-1
#defineOVERFLOW-2
typedefintStatus;
typedefintElemType;
typedefstruct{
ElemType*elem;
intlength;
intlistsize;
}List;
StatusInitList(List&L){
//构造一个空的线性表。
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
L.length=0;
L.listsize=LIST_INIT_SIZE;
printf("初始化一个线性表\n\n");
returnOK;
}
StatusDestroyList(List&L){
if(L.elem)free(L.elem);
//释放分配的存储空间
L.elem=NULL;
L.length=0;
L.listsize=0;
printf("销毁表!
\n\n");
returnOK;
}
StatusGetElem(ListL,inti,ElemType&e){
if(i<1||i>L.length+1)returnERROR;
//i值不合法
e=L.elem[i-1];
returnOK;
}
StatusListInsert(List&L,inti,ElemTypee){
ElemType*q,*p,*newbase;
if(i<1||i>L.length+1)returnERROR;
if(L.length>=L.listsize){
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!
newbase)return(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L.length;
returnOK;
}//插入数据
StatusListDelete(List&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;p<=q;++p)*(p-1)=*p;
--L.length;
returnOK;
}//删除数据
voidmain(){
ListL;
ElemTypee1,e2;
Statusk;
inti,a,b,c,d,e,n,j;
//初始化线性表L
InitList(L);
printf("初始化表元素个数:
");
scanf("%d",&n);
//往线性表插入数据
for(i=1;i<=n;i++){
printf("输入所插入的数据:
");
scanf("%d",&a);
ListInsert(L,i,a);
}
//将表L中的第b个元素的值赋给e
for(j=1;j<2;){
printf("请选择您要进行的操作:
1:
插入2:
取元素3:
删除4:
销毁\n");
scanf("%d",&c);
if(c==1){
printf("请输入插入元素的位置及元素:
");
scanf("%d%d",&d,&e);
ListInsert(L,d,e);
printf("线性表元素总数为%d\n",n+1);
n++;
for(i=1;i<=n;i++){
printf("%d\n",L.elem[i-1]);
}
}
if(c==2){
printf("输入要取数的位数:
");
scanf("%d",&b);
if(b<1||b>L.length){
printf("输入错误!
!
!
\n");
continue;
}
GetElem(L,b,e1);
if(k=ERROR)
printf("读取数据失败,",b);
else
printf("第%d个元素的值为%d\n",b,e1);
}
//删除元素
if(c==3){
printf("输入删除第几个数:
");
scanf("%d",&c);
if(c<1||c>L.length)
printf("输入错误!
!
!
元素不存在\n");
k=ListDelete(L,c,e2);//删除第c个数据
if(k==ERROR)//表中不存在第c个数据
printf("删除第%d个元素失败\n",c);
else//表中存在第c个数据,删除成功,其值赋给e2
printf("删除第%d个元素成功,其值为%d\n\n",c,e2);
}
//销毁表
if(c==4){
j++;
DestroyList(L);
printf("销毁L后,L.length=%d,L.listsize=%d,L.elem=%u\n\n",L.length,L.listsize,L.elem);
}
}
}
2、链式存储结构的基本操作的程序代码:
#include
#include
typedefstructstudent{
intnumber;
structstudent*next;
charname[10];
}student;
typedefstructstudent*stud;
voidCreateList();
studhead;
voiddetele();
voidCreateList();
voidinsertList();
voidprint();
voiddestorylist();
voidreverse();
intmain(intargc,char*argv[]){
intc=0;
while(c!
=-1){
printf("\t\t链式存储结构的基本操作\n\n");
printf("\t1.创建链表\n\t2.插入元素\n\t3.删除单个元素\n\t4.销毁元素\n\t5.翻转链表\n\t-1.退出\n");
printf("\n");
printf("请选择操作:
");
scanf("%d",&c);
switch(c){
case1:
CreateList();
break;
case2:
insertList();
break;
case3:
detele();
break;
case4:
destorylist();
break;
case5:
reverse();
break;
default:
exit(0);
break;
}
}
system("PAUSE");
return0;
}
/*创建链表*/
voidCreateList(){
studpointer;
studNew;
head=(stud)malloc(sizeof(student));
if(head==NULL)
{
printf("Memorymallocfailture!
");
exit(-1);
}
pointer=head;
inti=0;
//循环读入
while(i++<3){
New=(stud)malloc(sizeof(student));
if(New==NULL){
printf("Memorymallocfailture!
");
exit(-1);
}
printf("pleaseinputthenumber:
");
scanf("%d",&New->number);
printf("pleaseinputthename:
");
scanf("%s",New->name);
New->next=NULL;
pointer->next=New;
pointer=New;
printf("\n");
}
print();
}
/*插入链表*/
voidinsertList(){
inttag;
intpos;
printf("请选择插入方式:
0.头部1.尾部2.中间:
");
scanf("%d",&pos);
if(pos==2){
printf("\n请选择欲插入的位置:
");
scanf("%d",&tag);
}
studpointer;
studNew;
New=(stud)malloc(sizeof(student));
if(New==NULL){
printf("Memorymallocfailture!
");
exit(-1);
}
printf("pleaseinputthenu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告