数据结构实验二试验报告 线性表的基本操作Word文件下载.docx
- 文档编号:19271731
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:17
- 大小:134.49KB
数据结构实验二试验报告 线性表的基本操作Word文件下载.docx
《数据结构实验二试验报告 线性表的基本操作Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验二试验报告 线性表的基本操作Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
stdlib.h>
//----------宏定义----------//
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
#defineLIST_INIT_SIZE50
#defineLISTINCREMENT10
//----------结构体----------//
typedefintStatus;
typedefintElemType;
typedefstruct
{ElemType*elem;
intlength;
intlistsize;
}SqList;
typedefstructlink
{intdata;
structlink*next;
}link,*linklist;
//----------顺序表中的函数----------//
StatusInitList_Sq(SqList*L)
{inti,a;
L->
elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
//分配空间
if(!
L->
elem)exit(OVERFLOW);
//若存储分配失败,返回-2
length=0;
//空表,长度为0
listsize=LIST_INIT_SIZE;
//初始存储容量
printf("
请输入结点数:
"
);
scanf("
%d"
&
a);
请输入数据:
\n"
for(i=0;
i<
a;
i++)
{scanf("
&
elem[i]);
(L->
length)++;
}
returnOK;
}
voidprintlist_sq(SqListL)
{inti;
printf("
输入的元素为:
L.length;
L.elem[i]);
}
StatusListInsert_Sq(SqList*L,inti,ElemTypee)
{int*q=&
(L->
elem[i-1]);
ElemType*newbase,*p;
if(i<
1||i>
length+1)
returnERROR;
//检查i值是否合理
//将线性表第i个元素之后的所有元素向后移动
if(L->
length>
=L->
listsize)
{
newbase=(ElemType*)realloc(L->
elem,(L->
listsize+LISTINCREMENT)*sizeof(ElemType));
if(!
newbase)
exit(OVERFLOW);
L->
elem=newbase;
listsize+=LISTINCREMENT;
q=&
elem[i-1]);
for(p=&
elem[L->
length-1]);
p>
=q;
--p)
*(p+1)=*p;
*q=e;
++L->
length;
returnOK;
StatusListDelete_Sq(SqList*L,inti,ElemTypee)
{int*p,*q;
1||(i>
length))
p=&
e=*p;
q=L->
elem+L->
length-1;
for(++p;
p<
++p)
*(p-1)=*p;
--L->
returnOK;
}
StatusGetElem_Sq(SqList*L,inti,ElemType*e)
{printf("
输入要查找元素的位置:
scanf("
i);
if(i<
length)
//判断i值是否合理,若不合理,返回-
else
*e=L->
elem[i-1];
//数组中第i-1的单元存储着线性表中第i个数据元素的内容
该位置的元素为%d"
L->
intListLength_Sq(SqList*L)
该线性表长为:
length);
return(L->
//----------链表中的函数----------//
voidadd_top(link*top)
{link*p;
intlength,i;
top->
next=NULL;
输入建立链表长度:
请输入结点元素:
for(i=1;
=length;
{p=(link*)malloc(sizeof(link));
p->
data=i;
next=top->
next;
next=p;
voidarrive_end(link*top)
{link*p=top->
while(p!
=NULL)
{printf("
p->
data);
p=p->
printf("
voidadd_bottom(link*top)
{link*p,*q;
q=top;
p=(link*)malloc(sizeof(link));
q->
q=p;
q->
intlength(link*top)
{ink*p;
intlength=0;
p=top;
while(p->
next!
{
length++;
returnlength;
voiddelete(link*top,intpos)
{inti=0;
link*p=top,*q;
=NULL&
&
pos-1)
{p=p->
i++;
q=p->
next=q->
free(q);
intinsert(link*top,inti,intpos)
{intj=0;
link*p=top,*s;
while(j<
i-1&
p!
{j++;
if(p==NULL)//未找到第i-1个结点
return0;
else//找到第i-1个结点*p
{s=(link*)malloc(sizeof(link));
//创建新结点*s
s->
data=pos;
next=p->
//将*s插入到*p之后
next=s;
return1;
intGetElem(link*top,inti)
{intj=0;
link*p;
p=top;
next&
j<
i)
j++;
if(i==j)
//----------主菜单和二级菜单----------//
intmenu_select_list()
{intchoice;
*****************************************\n"
*1------------------顺序表*\n"
*2------------------链表*\n"
*3------------------退出*\n"
请输入选择:
(1-3)"
choice);
if(choice<
1||choice>
3)
输入选择有误,请重新选择(1-3):
returnchoice;
intmenu_select_2_sqlist()
{intchoice;
\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"
\t*1----------建立顺序表*\n"
\t*2----------显示*\n"
\t*3----------插入*\n"
\t*4----------删除*\n"
\t*5----------查找*\n"
\t*6----------求线性表的长度*\n"
\t*7----------返回*\n"
请输入选择(1-7):
if(choice<
7)
输入选择有误,请重新选择(1-7):
returnchoice;
intmenu_select_2_list()
\t*1----------前插建立链表*\n"
\t*3----------后插建立链表*\n"
\t*4----------插入*\n"
\t*5----------删除*\n"
\t*6----------查找*\n"
\t*7----------求线性表的长度*\n"
\t*8----------返回*\n"
请输入选择(1-8):
8)
输入选择有误,请重新选择(1-8):
//----调用顺序表中的函数----//
voidmain()
{SqListL;
inti,e;
linktop,p;
intpos;
while
(1)
switch(menu_select_list())
while
(1){
case1:
switch(menu_select_2_sqlist())
{case1:
InitList_Sq(&
L);
system("
cls"
break;
case2:
printlist_sq(L);
getch();
case3:
请输入要插入的位置:
scanf("
printf("
请输入要插入的元素:
scanf("
e);
ListInsert_Sq(&
L,i,e);
插入后的线性表:
printlist_sq(L);
getch();
system("
case4:
请输入被删除的位置:
ListDelete_Sq(&
已成功删除!
break;
case5:
GetElem_Sq(&
L,i,&
case6:
ListLength_Sq(&
case7:
return0;
break;
default:
\t\t\t输入有误,请重新输入:
}
}break;
//----调用链表中的函数----//
{
case2:
switch(menu_select_2_list())
{
case1:
add_top(&
top);
printf("
建立好的链表为:
arrive_end(&
getch();
system("
break;
case2:
system("
case3:
add_bottom(&
arrive_end(&
case4:
请输入插入位置:
pos);
insert(&
top,i,pos);
arrive_end(&
getch();
break;
case5:
请输入删除位置:
scanf("
delete(&
top,pos);
printf("
删除后的链表为:
arrive_end(&
system("
case6:
请输入查找位置:
GetElem(&
top,i);
case7:
pos=length(&
链表长度为:
%d\n"
pos);
getch();
system("
case8:
default:
;
}
}
default:
}break;
pause"
四:
实验内容截图
实验主菜单:
一、顺序表:
1、顺序表的建立:
3、顺序表的显示:
4:
插入操作:
5、删除操作:
6、查找操作:
7、求线性表长度:
二、链表:
1、前插建立链表:
2、显示链表:
3、前插链表插入操作:
4、前插链表删除操作:
5、前插链表查找操作:
6、求链表长度:
7、后插建立链表的建立:
8、后插链表的显示:
9、后插链表的插入操作:
10、后插链表的删除操作:
11、后插链表的查找操作:
12、后插链表的长度:
五、实验项目分工
王星:
定义链表中的函数和调用链表函数。
郭坤铭:
定义顺序表中的函数和调用顺序表函数。
张磊:
进行宏定义和结构体的定义;
设计编写主菜单和二级菜单。
六、实验总结
我组将本次实验实验分成了三大部分,三个人分别负责一部分,由于初次接触数据结构实验,对于实验所用知识不够了解和编写不熟悉,经过三人的商讨和书本知识的巩固学习,慢慢的将实验的每一部分编写了出来,在此过程中遇到许多疑惑和困难,经过不断研究和摸索调试,实验项目最终得以完成。
因此,在今后的学习中应认真学习课本知识,不断强化已学内容,要练习,熟悉算法,逐步提高编程能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构实验二试验报告 线性表的基本操作 数据结构 实验 试验报告 线性 基本 操作
![提示](https://static.bdocx.com/images/bang_tan.gif)