数据结构实验报告Word文档下载推荐.docx
《数据结构实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
三.实验前的准备
●了解线性表的顺序和链式存储结构。
●理解并定义线性表的存储结构,线性表的运算。
三.实验要求及实验软硬件环境
【基本要求】
●理解并定义线性表的存储结构。
●掌握线性表的基本操作:
【实验组织方式】
●个人实验
【实验条件】
●Windows操作系统
四.实验过程及程序清单
1、线性表的基本操作的程序代码:
#include"
stdio.h"
malloc.h"
process.h"
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&
if(L.elem)free(L.elem);
//释放分配的存储空间
L.elem=NULL;
L.length=0;
L.listsize=0;
销毁表!
\n\n"
StatusGetElem(ListL,inti,ElemType&
e){
if(i<
1||i>
L.length+1)returnERROR;
//i值不合法
e=L.elem[i-1];
}
StatusListInsert(List&
L,inti,ElemTypee){
ElemType*q,*p,*newbase;
if(i<
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;
}//插入数据
StatusListDelete(List&
L,inti,ElemType&
ElemType*p,*q;
if((i<
1)||(i>
L.length))returnERROR;
p=&
e=*p;
q=(L.elem+L.length-1);
for(++p;
p<
++p)*(p-1)=*p;
--L.length;
}//删除数据
voidmain(){
ListL;
ElemTypee1,e2;
Statusk;
inti,a,b,c,d,e,n,j;
//初始化线性表L
InitList(L);
初始化表元素个数:
"
scanf("
%d"
&
n);
//往线性表插入数据
for(i=1;
i<
=n;
i++){
输入所插入的数据:
a);
ListInsert(L,i,a);
//将表L中的第b个元素的值赋给e
for(j=1;
j<
2;
){
请选择您要进行的操作:
1:
插入2:
取元素3:
删除4:
销毁\n"
c);
if(c==1){
printf("
请输入插入元素的位置及元素:
scanf("
%d%d"
d,&
e);
ListInsert(L,d,e);
线性表元素总数为%d\n"
n+1);
n++;
for(i=1;
printf("
%d\n"
L.elem[i-1]);
}
if(c==2){
输入要取数的位数:
b);
if(b<
1||b>
L.length){
输入错误!
!
\n"
continue;
GetElem(L,b,e1);
if(k=ERROR)
读取数据失败,"
b);
else
第%d个元素的值为%d\n"
b,e1);
//删除元素
if(c==3){
输入删除第几个数:
if(c<
1||c>
L.length)
元素不存在\n"
k=ListDelete(L,c,e2);
//删除第c个数据
if(k==ERROR)//表中不存在第c个数据
删除第%d个元素失败\n"
c);
else//表中存在第c个数据,删除成功,其值赋给e2
删除第%d个元素成功,其值为%d\n\n"
c,e2);
//销毁表
if(c==4){
j++;
DestroyList(L);
销毁L后,L.length=%d,L.listsize=%d,L.elem=%u\n\n"
L.length,L.listsize,L.elem);
2、链式存储结构的基本操作的程序代码:
#include<
stdio.h>
stdlib.h>
typedefstructstudent{
intnumber;
structstudent*next;
charname[10];
}student;
typedefstructstudent*stud;
voidCreateList();
studhead;
voiddetele();
voidinsertList();
voidprint();
voiddestorylist();
voidreverse();
intmain(intargc,char*argv[]){
intc=0;
while(c!
=-1){
\t\t链式存储结构的基本操作\n\n"
\t1.创建链表\n\t2.插入元素\n\t3.删除单个元素\n\t4.销毁元素\n\t5.翻转链表\n\t-1.退出\n"
请选择操作:
switch(c){
case1:
CreateList();
break;
case2:
insertList();
case3:
detele();
case4:
destorylist();
case5:
reverse();
default:
exit(0);
break;
system("
PAUSE"
return0;
/*创建链表*/
voidCreateList(){
studpointer;
studNew;
head=(stud)malloc(sizeof(student));
if(head==NULL)
{
Memorymallocfailture!
exit(-1);
pointer=head;
inti=0;
//循环读入
while(i++<
3){
New=(stud)malloc(sizeof(student));
if(New==NULL){
pleaseinputthenumber:
New->
number);
pleaseinputthename:
%s"
New->
name);
New->
next=NULL;
pointer->
next=New;
pointer=New;
print();
/*插入链表*/
voidinsertList(){
inttag;
intpos;
请选择插入方式:
0.头部1.尾部2.中间:
pos);
if(pos==2){
\n请选择欲插入的位置:
tag);
pleaseinputthenu